{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 100)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import datasets as d\n",
    "import numpy as np\n",
    "\n",
    "#datasets.*? #查看datasets下的方法,同dir(datasets)\n",
    "#dir(datasets)\n",
    "#datasets.load_*? #直接加载数据集\n",
    "#datasets.fetch_*? #下载某些数据集\n",
    "#datasets.*?\n",
    "#datasets.make_*? #创建样本数据集\n",
    "#创建回归数据集\n",
    "reg_data = d.make_regression() \n",
    "reg_data[0].shape,reg_data[1].shape #获取矩阵大小\n",
    "#自定义更复杂的数据集\n",
    "complex_reg_data = d.make_regression(1000, 10, 5, 2, 1.0)\n",
    "complex_reg_data[0].shape,complex_reg_data[1].shape\n",
    "#创建一个非均衡数据集\n",
    "classification_set = d.make_classification(weights=[0.1])\n",
    "np.bincount(classification_set[1])\n",
    "#reg_data[0][1:4,1:7] #截取\n",
    "#reg_data[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "506 506\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x10b9caa50>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeYAAAEICAYAAACK3Vc9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8leX5/9/3Gdl7sUkYAuIAFEVEREEt1ln3xt1qa111\n1l+1X621tbau1i1arVonqCiKAxQRKiAgU9kjkJ2Q5OScnHH//rhyzkkggUwS4Hr3lVdOnvM8930/\nj6/yea7rvoax1qIoiqIoStfA0dkLUBRFURQligqzoiiKonQhVJgVRVEUpQuhwqwoiqIoXQgVZkVR\nFEXpQqgwK4qiKEoXQoVZUXaDMWamMebqJr7LM8ZYY4yrGePcZ4x5tZ3X1tcYU2WMce7iHGuMGdie\n8yqK0nGoMCv7LXWCW2aMie3stbQWa+1Ga22StTYIu36JaA7GmAuMMauMMRXGmEJjzMvGmJT2W3Gz\n1tDuLzCKsjehwqzslxhj8oCxgAVO79TFdC2+AcZYa1OB/oALeKBzl9QymuO9UJSujAqzsr9yGTAX\neAmY1IzzBxhj/meM2W6MmWqMyWjsJGNMT2PM+8aYUmPMamPMNTucEmeM+a8xptIYs9AYM6yJcf5o\njHmi7rPbGFNtjHm47u94Y4zXGJNR35VujPkT8rLxZJ17+8l6Q55gjPnJGFNujPmnMcY0Nq+1dpO1\ntrjeoSDQpBvcGHOQMWZG3f0WGGPurjvuMMbcaYxZY4wpMca8GX5m9dY8yRiz0RhTbIz5fd13E4G7\ngfPr7mFx3fFUY8wLxpitxpgtxpgHwu57Y8zlxphvjDH/MMaUAPcZYwYaY2bVWf7Fxpj/NnUPitLV\nUGFW9lcuA/5T9/MzY0y3Zpx/JdADCACPN3HeG8BmoCdwDvCgMWZ8ve/PAN4CMoDXgCnGGHcj48wC\njqv7fASwDTi27u/RwCprbWn9C6y1vwe+Bn5T597+Tb2vT60b51DgPOBnTd2oMeYYY0wFUAmcDTza\nxHnJwGfA9Lr7HQh8Xvf1DcCZwLi678qAf+4wxDHAYGAC8AdjzIHW2unAg8B/6+4h/OLyEvLcBwIj\ngJOA+i77UcBaoBvwJ+B+4FMgHegNPNHU/SpKV0OFWdnvMMYcA+QCb1prFwBrgIt2c9kr1tql1tpq\n4P8B5+0YcGWM6QOMAe6w1nqttYuA5xFRD7PAWvu2tdYP/B2IA45qZL5vgQOMMZmIIL8A9DLGJCFi\nN6tld81D1tpya+1G4EtgeFMnWmtn17myewMPA+ubOPVUYJu19pG6+6201s6r++5XwO+ttZuttT7g\nPuCcHdzMf7TW1lhrFwOLgaa8B92AnwM3WWurrbWFwD+AC+qdlm+tfcJaG7DW1gB+5L9xz7q1zW76\n0ShK10KFWdkfmQR8Ws9l+xq7d2dvqvd5A+AGsnY4pydQaq2t3OHcXo2NY60NEbWuG1AnLvMRET4W\nEeI5iPC3Rpi31fvsAZJ2d4G1dgtiDb/RxCl9kJeaxsgF3qtznZcDKxC3eH3PRHPXlIs87631xnsG\nyKl3zqYdrrkdMMD/jDHLjDFXNjG2onQ5NEhC2a8wxsQjrlynMSYsDLFAmjFmWJ311hh96n3ui1hk\nxTsczwcyjDHJ9cS5L7ClsXGMMQ7EKs1vYs5ZwHjEdftd3d8/A44EvmrimvZuF+cCBjTx3SYaWq07\nfneltfabHb+oC7zbFTvewybAB2RZawPNucZauw24pm6+Y4DPjDFfWWtX72ZuRel01GJW9jfORCy3\noYg7dzhwILI3e9kurrvEGDPUGJMA/B/wdjhFKYy1dhNi1f7ZGBNnjDkUuAqon/pzuDHmrDqX7k2I\n4MxtYs5ZdWtabq2tBWYi+6rrrLVFTVxTgERTtwpjzMXGmL51n3OR/drPmzj9Q6CHMeYmY0ysMSbZ\nGDOq7rungT/VjYExJtsYc0Yzl1EA5NW9uGCt3YrsFz9ijEmpCywbYIwZt4v7ONcY07vuzzJEuEPN\nnF9ROhUVZmV/YxIwuS7/d1v4B3gSuHgXqTavIAFI25B94d82cd6FQB5iBb8H3Gut/aze91OB8xGx\nuBQ4q26/uTHmAPFErePlgJemrWWAx5C93DJjTFMBartiKDDHGFONpE6tos7y3JE6r8CJwGnIc/kJ\nOL7eOt4HPjXGVCIvH6MaG6cR3qr7XWKMWVj3+TIgBnkGZcDbSCBeUxwBzDPGVNWt40Zr7dpmzq8o\nnYqxtr09X4qiKIqitBa1mBVFURSlC6HCrCiKoihdCBVmRVEURelCNFuYjTEvGilqv7TesYeNMSuN\nMUuMMe8ZY9I6ZpmKoiiKsn/Q7OAvY8yxQBXwb2vtwXXHTgK+sNYGjDF/AbDW3rG7sbKysmxeXl6r\nF60oiqIoexMLFiwottZmN+fcZhcYsdZ+tWNhAGvtp/X+nIvUBt4teXl5zJ8/v7lTK4qiKMpejTFm\nQ3PPbc895iuBj5v60hhzrTFmvjFmflFRU7URFEVRFGX/pl2Eua5lWwDp1NMo1tpnrbUjrbUjs7Ob\nZc0riqIoyn5Hm2tlG2MuR7rMTLBarURRFEVR2kSbhLmuqfntwDhrrad9lqQoiqIo+y8tSZd6HekR\nO9gYs9kYcxVSXzgZmGGMWWSMebqD1qkoiqLsBVhrqa6tJmS1Z0hraUlU9oWNHH6hHdeiKIqi7MV8\nuuZTHp7zMPmV+aTEpnDNYddwxfArMMZ0yHzBUJBiTzGpcanEueI6ZI7OQPsxK4qiKG1mzqY53PLJ\nLSS4E8hOyMYX9PHInEew1nLVYVe1+3zvr3qfh795mApfBU6Hk4sOvoibR9+My7H3y5qW5FQURVHa\nzFPfPYXb6SYxJhFjDHGuOFLjUnlu4XMEQoF2nWvOpjnc/fnd+EN+MhMySXQnMnnRZB6d+2i7ztNZ\nqDAriqIobWZd+ToS3AkNjsW6Yqmuraa6trpd53p2wbO4nW7i3fEAuJ1uMuIzeO2H1/AGvO06V2eg\nwqwoiqK0mUNyDqHSV9ngmMfvISMhg+TY5Hada1PFJuJccdQGa9lWtY3N2zdTE6jBH/Sz3be9Xefq\nDFSYFUVRlDbzmyN/g8M4KK0pjQhkVW0Vtxx1Cw7TvlJzRK8jKKgqYEnBEjZWbCS/Mp8VRSso9ZaS\nGpvarnN1BirMiqIoSps5KOcgXj3rVUb1GkUgFKB/en/++fN/csaQM9p9rqtGXEVRdRGBUACXw4VB\nor6dxsmX679s9/n2NHt/+JqiKIrSJTg452CePe3ZDp+nJlBD79TeeGo9VNZWkhCTQM/kngRtkA9+\n/ICJAyd2+Bo6EhVmRVEUZa/C5XAR44ihe0b3BsdLPCXEOmM7aVXth7qyFUVRlL2KIVlD6JbUjXJv\neeRYMBQkaIP8YsgvOnFl7YMKs6IoitLlWVO6hs/Xfs6q4lUYDI+f/DiJ7kRKPCUUVRdRVlPGpGGT\nOKbvMZ291DajrmxFURSly+IL+Lhtxm18uf5LHMZByIYY3Xs0j058lM8u+4xvNn5DZW0lI7qPIDct\nt7OX2y6oMCuKouzDhGyI2Rtn8+GPH7Jp+yYGpA/g0kMvZXDW4BaN88XaL3jx+xcp9ZZydJ+juXz4\n5fRO6d1Bq47y7IJn+WztZ+Qk5mCMwVrL7I2zeWzuY9w19i4m9J/Q4WvY05jOaKE8cuRIO3/+/D0+\nr6IoSlfGWsuCrQvYWLGRvql9ObzH4W1qALGkYAm/+vBXLC5YTDAUxO100z2pO4nuRJ4+9WmO6n3U\nbsfwBrxMem8SU1dNBSQlKTUulb6pfXnz3Dfpm9q31etrDmNeHEPIhho0qfAH/Xj8HhZcu6DDGmS0\nN8aYBdbakc05V/eYFUVRugCVvkoueucirph6BX/48g9cMfUKLnrnop2qabVkvGs/uJa1ZWsBIuUr\nC6oKMBju/+p+mmOY/WX2X/jwxw9xO6QEpsvposJXQX5lPs8seKZVa2sJXr8Xp3E2OOZ0OPEFfB0+\nd2ehwqwoitIFeGzeYywpWEJmfCbZidlkxmeyuGAxj817rFXjzVw/k+raarwBb6TjksvhImiD+EN+\nNpRvoMJXscsxfAEfby1/Cwy4nDKGwzhwGAdVtVXM3TS3VWtrCRP6T2gQfQ1Q6inl2Nxj9xpruaWo\nMCuKonQB3lv5Hunx6RGxMcaQEZ/Beyvfa9V4233bCVpxX4dsqMF3/qBfLGBXfKPXltWUMX31dKav\nnk4gFMBgGozhMA5qg7X0SO7RqrW1hJuPupnshGyKqosiEdipcancecydHT53Z6HBX4qiKF2AYCi4\nkwVojCEYCrZqvOHdh+M0TroldmNd+TpCNoRBgqcCNsC5B51LrGvnYhxTVk7hvpn3RYR4a9VW4lxx\n1PhrcDvdGGOoDdaS5E7iqhHt32d5R3ok92DqhVOZ9uM0lhctZ1DmIE4bfBppcWkdPndnocKsKIrS\nBZg4cCIf/PgBOYk5kWOlNaWcNui0Vo03NHsopw8+XSzxuHRKakqw1pISm8J5Q8/j1tG37nTNxoqN\n3PvlvSTGJEZEO2iDrCuTlo4ev4eQDeF2uLnvuPs4vt/xrbvZFpISm8KFh1y4R+bqCjRbmI0xLwKn\nAoXW2oPrjmUA/wXygPXAedbasvZfpqIoyr7NraNv5fut35NfmU/QBnE6nPRO7s0to29p9hjhVKJX\nl7xKqbeU8XnjuWnUTczeNJtYZyyjeo/ijMFnkJ2Y3eC6n0p+YlvVNr7b8h2BUKCBJZ2TmEMgFGBk\nj5EEbZBBmYO45rBr6JPap93uXWlISyzml4AngX/XO3Yn8Lm19iFjzJ11f9/RfstTFEXZP8hOzGbq\nhVP5ct2XrCldw4CMARze83C2bN9CbbC2WTnDkxdN5pFvH8HtcBO0Qaavno7B0CelD/3S+3FM32Ma\niHKlr5Ibp9/Id/nf4TROCqsL8Qf9YrXX86rHOGO44OALOG1w66z33VHhrcAX9JGdkN3qgK78ynzm\nbp5LnCuOY/oeQ0psSovH8Pg9vLnsTT766SMS3Amcf9D5TBw4cY8HmTVbmK21Xxlj8nY4fAZwXN3n\nl4GZqDAriqK0ijhXHCcfcDLWWp5Z8Ax3fX4XBkMgFGBM3zE8fOLDJMcmN3rtdt92npj3BOlx6TiN\nk0UFi7DWEiJEyIbYvH0zV069kk8v/ZSkmCQA/vT1n5i7eW6keIfTOFlWtIxt1dvoniQNImqDtRgM\no3qPavf7La0p5d4v72Xm+plgIDc1lwfGP8Dw7sNbNM6L37/Io3MflX10Y4h1xvLEyU8wus/oZo9R\nG6zlyqlXsqRgCQnuBEI2xHdbvmPRtkXcNfauFt5Z22hrVHY3a+3Wus/bgG5NnWiMudYYM98YM7+o\nqKiN0yqKouy7zFg7gyf+9wRJMUmkxaeRkZDB1xu+5v9m/V+T1/xY8iMAbqebcm95pKCIwzio8FWQ\nHp9OZW0lX66TfsU1/ho++ukjshKyIhZhcmwyWQlZbNm+hYKqAgqqCqj0VXLnMXc22PtuD6y1XD/t\ner5c/yUZCRlkxmeSX5nP1e9fzdbKrbsfoI7lRcv5x9x/kBKbQnZiNlkJWTiMgxun34jH72n2OF+s\n+4KlhUvJScwhOTaZ1LhUMhMyee2H19iyfUtrbrHVtFu6lJVM9Saz1a21z1prR1prR2ZnZzd1mqIo\nyn7Pvxf/m1hnLG6nG5D0pMyETD5Z80mTBUcy4jMI2ADWWvwhP7bun+OQDUVaIdYGa1letJxKXyW1\nwVpCNoTDRGXAGEPvlN4MzhzMtYdfy6+P+DXvnPcO4/uNZ8rKKXz444c75RS3lhXFK1hetDwipMYY\nUuNS8Qa8TFk5pdnjfLL6EwlIq3tWAIkxifgCPv635X/NHue7Ld9hjGngtnY6nBhjWFa0rNnjtAdt\njcouMMb0sNZuNcb0AArbY1GKoij7M6U1pQ2EBogIaFVtVaPu7P7p/RnRfQQLti4g0Z0IFnx+H4FQ\nAIC1ZWsprCrkxe9f5PWlr3PRwRcxKHMQ68rXNUg9qvRVctEhF3HTUTcB8PoPr/Pn2X+OCL3b4eaR\nkx5pc0R2YXVhRJB3vM9N2zc1exx/yN+kSdiSVLPuSd13yvcOkxmf2exx2oO2WszvA5PqPk8CprZx\nPEVRlP2e4/KO28kyrvZXk5OYE9n7bYzHJj7G2L5j8fg9BG0Qb9BLwAZYX7GejRUbAchOyCY5NpmX\nFr/EITmH4DIuCqsKWVW8irmb57KhYgM/lf7E+vL1rC1by59n/zni4s5KyCLGGcPvPv0d233b23SP\ngzMHE7TBncQzZEMc3uPwZo9zYv8TcRhHg3G8AS9Oh5Mjex3Z7HFOG3wa8a54tvu2Y63FWkuxp5i+\nqX0Z0WNEs8dpD5otzMaY14FvgcHGmM3GmKuAh4ATjTE/ASfU/a0oiqK0gStHXEn3pO4UVhdS4a2g\nqLoIf9DPH4/74y4jhNPj03n61Ke57ojr6J7UnRhnjLhj6/7nD/lZVbIq0ohixtoZTL1gKtmJ2fgC\nPvqk9GFY92EsyF/Axe9czNSVUwmEAsQ4YyJzxLvj8Yf8zNk0p9n3U+mr5J3l7/DY3Mf4bO1n+IN+\neiT34IKDLqDYU8x273a2e7eztXIreWl5nHzAyTuNsa1qG28sfYNXFr8Sqf8NUkjl0mGXUlZTRkFV\nAYXVhXj8Hh6c8GCTgXKN0T2pO0+f+jQZcRmU1pRS4ilhRPcRPHfacw3c/XuClkRlN5Xdve/13FIU\nRekgrLVs2r6JQChAv7R+jQptVkIW757/Lm8vf5t5W+aRm5rL+QedzwGZBzRrji/WfQFW9kjjnfFU\neCsic1f7q6n2V5PoTqSgugBv0EtxdTF90/riC/io8deQmZBJsaeYhVsXNn4P2Ga7ideWrWXSe5Mo\n85ZF9rQHZw7mpTNf4q6xdxHriuWROY9QVVtFSmwKAzMG7uRS/vinj7nz8zsJhGQP3WmcXH/E9Vx3\nxHUYY7jt6Ns4ddCpzN44mwR3AhP6TWhVudCRPUfy6aWfsrFiI7Gu2F16JzoSrfylKIqyh9hQvoFb\nP72VVSWrMBi6JXbjryf+tVFXaVpcGlcfdjVXH3Z1i+dxOVz4Qj6wEn0NIqYWC1ZqZZcHyxnefTg/\nlvzI5srNInp1m7Xxrni6JXXD7XTjdDgJhAKRRhi+gA+ncTarZSTAfTPvo8JXEcmfttaypGAJd352\nJ6cPPp3/LPkPPVN6khyTTMiGmLF2Bt6Al6dPfRqAcm85d39+NwnuhEjrx0AowL/m/4vj8o7jwOwD\nMcYwNHsoQ7OHtvhZ7Ygxhty03DaP0xa0iYWiKMoewB/0c+XUK/mx5Ecy4zPJiM+g1FvKtR9cS4mn\npFVj5lfm88icR7h8yuU8NPshNlVI0NTZQ8/GaZx4g178IT+mXrUQX0isYmMMd4y5g5nrZsqerHES\n44whxhlDjb+GwqpCxvYdy7WHXUt5TXkkfaraX8294+4lM2H3AVGVvkoWbl1Ienw6IKK8vnw9Wyq3\n8O8l/+byKZeztmwt8a54yaN2OMlKyOKbjd+woXwDAHM3zyVogw36MbscLoKhIJ+v+7xVz62roxaz\noijKHmDu5rkUe4obCFpKbApF1UVMXzOdiw+5uEXjrS5dzcXvXkx1bTWxrljm58/nneXv8NKZL3H2\ngWfz5tI3mbJyCiHEfexA2jU6jZORPUfyx+P/yMCMgVw37Toy4jKoqK3AZV3S6AKLJ+DhjMFnkJGQ\nwc8G/oyvN3yN2+lmfL/xzapCBhJhXf+loMhTRGF1obwEOGIwxuAL+lhXvo5BmYMi17gcLgqqC8hN\ny21wfX2MMQ2+2+7bzrzN8zDGMKrXqBbtL3c1VJgVRVH2AGXeMkLsnI4TsiEKq1qeafr3b/+Ox++J\nltiMlTSrv3zzF/79i39zztBzWLh1Id6gNyLe3RO7EwgFGN9vPAMzBgKSUpSbnkuxp5jC6kICoQDp\ncekkxUpxE4BBmYMiwtkSEmMSOTb3WGZtmEV2YnZElEOEIusu95ZT4a2IuMsDoQBBG2RA+gAARvcZ\njcvhosZfQ7xb2lT6g34cODhxwIkAzFgzgzs+u0NaVBqDy7j420l/22NNNtobdWUriqLsAQ7JOURK\nZNYLbAoHMo3sObLF43276dudWh+mxaXxXf53hGyI3LRckmKTyIrPIt4dj7UWX9CHw+EgLy0vcs2p\ng06lwltB75TeHNbjMI7odQRp8WmccsAp7RKNfO9x99I/vT8lnhK8fi9BGyQtLo3uSd3JTswmxhlD\nIBSgxl9Dpa+SEk8Jlw+/POJZSIlN4eETH8YX9FFcLS8P233buXn0zQzKHERhdSG3zbiNGKdY4MXV\nxWyu3Mw1H1xDUfXeWWVSLWZFUZQ9QL/0fpw79FzeXPYmMa4YHMZBjb+G0b1Hc3Sfo5u8zh/0M3fz\nXMq95Rza7dBIYFJaXBo1gZpIUFb43JSYFKlt3WsUWCnV6Xa6MRg2lG8gLT6NI3oeEbnmt6N+y4L8\nBawtXytWq3HRO7k3dx5zZ7vcd3ZCNi+f+TLLipYx+fvJzFw/k76pfcGAy7jok9qHQChASkwKGQkZ\nXHropZw++PQGY0zoP4HPLv2MrzZ8hT/k5+g+R0fc6bPWz6I2WBtJcQpHuZd7y7lu2nW8de5be7wJ\nRVtRYVYURdlD/GHcHziy15G8vfxtvAEvpw85nTMHn4nT4Wz0/LVla7n6/asp8ZRITLW1XHTIRdx5\nzJ1MGj6Jv37z10iucjAUpNxbzvVHXI8xhqLqIoI2SI/kHpTUSHBZj+QexLni+Hzd5/ziwF8AIvBv\nn/c2X2/8mjVla8hNzWVc7rgGrR9by/TV0/nrN3+lsLqQxJhELj7kYgqqC1hfvl6KgtggCe4EXjz9\nRQ7pdsgux8pMyIysuT61wVq8AW+kWlpYhEM2xLwt81hRvKJdorX3JCrMiqIoewhjDCcfcHKjBTR2\nxFrLzdNvpqSmhIyEDED2g1/94VWO7HUklx56KVsrt/L60tdxGidBG+Tcoefyy8N/CcDK4pXEOGPo\nltSNfun9IuOWeEr4Lv+7BiIXDuoa3298u93r7I2z+d2nvyPBnRApYPL0/Kf5zZG/oWdyTxZuXUif\nlD6cMeSMNjXIGN1ndKTud31RdhgHsY5Y3lr2FrlpuWQnZHN8v+NJcCe01y12GCrMiqIonUwgFGDm\n+pl8vu5zUmNTOXPImcQ4Y1hXvo6M+IzIeU6HE7fDzTsr3mFC/wncNfYufjnyl2zevpleyb0aRHxn\nJ2QTsiGstQ1cuSEbanZUdWuw1rK0cCk3Tb+JCm9FpMVkrCuWtLg0Xl78Mt9c+Q1nDjmzyTGCoWCk\nPGjf1L6M7j26Sa9C//T+nDLoFF5e9DK1wVoADIYeST0orilm8qLJxDhjKPeWUxOoYVDmIC455BJ+\nNfJXkWCyroYKs6IoSicSCAW44aMb+Hrj1ziMg5AN8doPr3H1YVdLIc1Gmjz4Ar7Itd6Al/7p/bHW\n8tDsh5iycgoWy6kHnMqA9AH8VPoTmQmZGAyVtZXEOmN3KYqtIWRDLClYQqWvkq82fsUbP7zBmrI1\ngESj903tS7ekbsS6YimuLqa6tprUuNRGx6rwVnDl1Cv5qfSnSKT2wIyBvHjGizsFu4V5+MSHmbNp\nDuU15cS548iIy5CqZn4vQ7OGsrJ4Jd6gF6wUeXlu4XMsK1rGc6c91yX3n1WYFUVROpEv133JVxu/\nIjshOyISvoCPyd9PJjkmmYKqAhzGQZwrjkR3It6Al1MGncK0H6fx0OyHqPBVYDAEbIBgKBixml9f\n+jr90vsxps8Y5myeg8HQM7knfxr/J3om92zzugOhAJW+Sspqyvj1R78mvzIfX9DHhvIN5Kblkh6f\nToW3AqfDycaKjaTHpROwATITMneZY/zo3EdZUbyCnMQcjDFYa1lVsoq/f/t3/u/4xvtRp8Sm8J+z\n/sNN02+S6O+6FLEBGQOorK3EF/QR44zBWktNoIb0uHTmbZ7H0sKlu93b7gxUmBVFUTqRL9Z/gdM4\nG1husa5YKn2VBEIB1pWtI0QIgyHGEcPEAyaSHpfODR/fQGJMIpkJmZR6SllTuibSuAIgJzGHjRUb\nuWPMHTx0wkPUBGrokdSjzRaitZbJiybzzIJn8NR62FK5heSYZPpn9GfL9i0YY9i8fTN5qXlUeCsI\nhoKEbIhtVduIc8dx9Yir2VixkdzU3EbX8v6P75MRnxH5zhhDelw67696f5dNPA7tdigzLp3ByuKV\nGGO467O7yK/Kp6ymLFJqNEy47/K68nVdUpg1j1lRFKUTSY1NJWh3bghR5CmiwFPAiB4j6J/en9TY\nVHwhH7PWz+Lct86lxFOCy7io8lVRE6jBYRwUe4oj/ZeNMQSCAdaWrSU9Pp2eyT2bJcrBUJD5+fOZ\nuX4mZTVlO33/ypJX+Nucv+E0ThLcCXgDXopriinxlETynoM2SElNCUOyhpASK+lbafFpJLgSePJ/\nT3L666dz5htnsqZ0zU7jW7tzc+Xmvkw4HU4OyjmIodlDOWfoOVTXVhPnjItUCAuEAiS5kyIpZh25\n194WVJgVRVE6kdMHn95g3xigrKYMj99Dj6QeuJ1uaf3okdaPxTXSJrGwupDv8r9jZfHKSLcqIPIb\nJNq6T0qfZq9lTekafvbqz7hq6lXcOP1Gjnv5OF5Z/Erke2stzy54ltS4VGJdsQRtUMp9Ggf5lfm4\nnW58AR++gI8iTxHLipYR54pjYMZArLUEbZD0+HQy4jPYULGBK6de2eC+QQqe7PhCUFZTxs8P+HmL\nrP3zDz6fcbnjImlmNX7J+e6b1pciTxFDs4cyovue7bPcXFSYFUVROpGh2UO5d9y91ARqKKspo9RT\nSlZCFr2Se0X2ZwurCyNWX8iG8Fs/IUL4Q34sllhnLMFQkNpgraROhYIUVhfSK6UXY3PHNmsdIRvi\n+o+up9hTTEZCBhnxGSTHJPPXb/7K4m2LASKFPGKdkuOc6E6M1Kz2BrysL1+P2+nGIhXOwsfCn1Pj\nUiNu5PT4dMq8ZczeOLvBOm466iYGZAyg2FPM1sqtlHhKyEvL49bRt7boucY4Y/jXKf/i1bNe5aET\nH+JnA37Dwup9AAAgAElEQVRGz+Se1AZrOfvAs3nm1Ge6ZOAX6B6zoihKp3PO0HP42YCfsWjbIhJj\nEhnWbRi//+L3TF05laLqIgyGECEsNtJkIozH7yHBnUCMK4ZYRyzl3nIMhpMHnswdY+6I7DnvjqWF\nS9laubVBylVYZN9d8S7Dug8jxhlDXloehdWFJMcm43A46JfWj59KfsJhHARCAQKhAE7jjHSDstay\neftm4txxdEvq1mDOkA1R5m1oHWfEZ/DOee/w9cavWV++ntzUXI7NPRa3093i52qMYUSPEYzoMYIb\njryBQCgQsfC7MirMiqIowOJti3llySts3r6Zo/sczUWHXERWQtYemz85NrmBdXvL6FuYu3ku68rX\ngYnuvYYrZgERKzreHU/v5N74gj4WXLsAt9PdYvGp8dc0eo3T4aSqtkrmM4bbj76dGz4WkQsX68hL\nyyMvLY95W+bh8XuIc8VFrNHaQC0J7gQqaysb5FSHrAS0Hdrt0J3mDBc8aW/qly/tynTt1wZFUZQ9\nwPTV07nkvUv4dM2nrClbw7MLnuWcN8+hsLrlXZ/ai5zEHD686EP6pfWjW2I3idzeoQVinCuOBHcC\nA9IHYLEM7z6cWFdsqyzCQ7odgsvhwhvwRo5ZawkEA5EuTgDH9TuOF854geHdh+NyuBjTZwxvnfcW\nj538GN2TuuM0zgbXh93WGfEZFFYXUuGtoNxbTrGnmDOGnNGqrlWtwVrLyuKVTPtxGt9v/b7RILOu\nQru8PhhjbgauBizwA3CFtda766sURVE6n0AowANfPUCCOyFiASbFJFFYVcjLi17mtjG3tXrcqSun\n8u6KdwE468CzOGPIGS2y2pJikvjzCX/mni/uwWmc5FfmE7IhXMaF2+EmZEPEOGOoqq0izhXH3WPv\nbtVaARLcCdx33H3c/fndbPdtjxQ7GZs7lhP6n9Dg3CN7HcmRvY7caYxLDr2Ev37zV7wBLy6HC4sl\nJyGHkA1x77h7SY1LZerKqbgcLnHfD/xZq9fbEnwBH7d+eiuzNszCYRxYaxmaPZSnT326yaIlnYlp\n61uDMaYXMBsYaq2tMca8CXxkrX2pqWtGjhxp58+f36Z5FUVR2oONFRs57fXTGpS+BKiuraZ7Unfe\nv/D9Fo9preW303/L52s/j5R9rPHXcGL/E3l04qMtDjqas2kOLyx8gW82fUNZTVlkHzgUCnFo90MZ\n2XMkFxx8gXRtaiOrS1fzwaoPKPeWc2zusYzLG9fslwlrLe+ufJdbPrkFT62HxJhEktxJjMkdw+MT\nH29WYwyP38MX676gsLqQA7MOZFTvUW3eE356/tM8Pu/xBkVLijxFnDboNB464aE2jd1cjDELrLXN\n6u/ZXg53FxBvjPEDCUB+O42rKIrSoaTEpkgqTyjYoB5zbbCWbonddnFl0yzatoiZ62eSnZgdEZWk\nmCS+WPcFiwsWM7z78BaNd3SfoyOtIbdVbeOHgh9IjUvl8B6HN1lDelf4Aj6cDmejgjswYyA3j765\nxWOC7EGffeDZnNDvBP753T9ZX76eUb1GMWnYJFzO3cvN2rK1XD7lcspqyvCH/Lgdbkb2GslTpzwV\nCSZrDW8te0vyqesVLcmIz+Cjnz7i/uPvb1VgWUfSZmG21m4xxvwN2AjUAJ9aaz/d8TxjzLXAtQB9\n+7b9rU5RFKU9SItLY+LAiUz7cRpZiVmRnOJAKMDlwy9v1ZhLC5cSDAUbWHoO4yBgAywtXNpiYV5Z\nvJIZa2YQtEFO6H9Cgz3flrC+fD0PfPUA3276FqfDySmDTuHOMXc2Wbe6NWzevplJ702i0FOIP+jn\n203fMmPtDJ4//flIQ4umuOuzu6jwVpCVKEF31lrmbZ7HG0vfaPV/CwBf0LeT1R0OogvaIG66ljC3\nOfjLGJMOnAH0A3oCicaYS3Y8z1r7rLV2pLV2ZHZ2dlunVRRFaTfuHXcvJw04idKaUspryqkN1nLP\nsfcwpu+YVo2XEZ/RqCXrcrh2cpnvjhcWvsA5b57D0/Of5tkFz3Lh2xfy+LzHW7ymCm8Fl7x7CfO2\nzCMrMYvUuFTeX/U+1027rl0Dof44648UegrJSsiiR3IPMhMyWVKwhBcWvrDL64o9xSwvWk56fHrk\nmDGGpJgk3lvxXpvWNHHgRMq95Q2OldaUclSvo9pkiXcU7eHKPgFYZ60tAjDGvAscDbzaDmMriqJ0\nOIkxifxj4j8oqi6itKaU3LTcNv2DfXy/40mJTaGspiwSXFTuLSc1NpXj8o5r9jibt2/msXmPkRaX\nFnG3BkIBnlvwHCcPPJkDMg9o9lgfr/64gTXqMA6yE7JZWriUJQVLGNZ9WPNvsAk8fg9zNs1pkGZm\njCElNoWpq6Zy41E3NnntjhHnYSy2zYVArht5HXM2zWHT9k0SKY4hNS6Ve469p03jdhTtIcwbgaOM\nMQmIK3sCoJFdiqLsdWQnZpOd2HaPXoI7gclnTOa2T2+TPGSgX1o//nbS3yKR383h203fErKhBnug\nLoeLoA0yZ9OcFgnz2rK1jTZzANhSuaVdhNnU/a8xdhfAlZmQybDuw1hSsCQS3Gatpbq2mnOGntOm\ndWUmZPLu+e8yY80MlhUto196P04eeDIpsSltGrejaI895nnGmLeBhUAA+B54tq3jKoqi7M0MyhzE\nlAumsHn7ZkAaJrTU8otxxjR6jTGmWRHO9RmaPXSnsayVOtID0ge0aKymiHfHc2zusXy14avIC461\nlu2+7Vw27LLdXv/ghAe5fMrlkWYcToeT4/KO4/yDzm/z2uJccZw2+DROG3xam8fqaNqcLtUaNF1K\nURRl95TVlDHh3xOIccZE0q68AS81/ho+ueSTnUpc7gqP38PZ/z2bjRUbSYtPIxgKUuGrYEK/CTz5\n8yfbbc0FVQVMmjKJ/Mr8SADc4T0P56lTnorcw67wBXzM3jibIk8RB2YdyKHdDu2yNa1bQkvSpVSY\nFUVRujAz183k1hm34g/6AXFlPzjhQSYOnNjisUo8Jfzzu38yffV04lxxnHfQeVwx/IoWW9+7IxAK\nMHvjbLZVbWNgxkAO73H4PiGubUGFWVEUZR+i0lfJ7I2zWVa0jD4pfRjTd0yX7SWsNE5nFBhRFEVR\nOohtVdt4aPZDlHvLCRECC5cPv5xbRt+y31ui+yLaxEJRFKULY63lho9voMJXQUZCBlkJWaTHpzN5\n0eSdehkr+wYqzIqiKF2YVSWryK/Mb9Bswelw4jAO3lvZtsIbStdEhVlRFKULUxusxWEcO7msHcbR\noEWjsu+ge8yKoihdmAOzDiQxJpHq2moSYxIBcW/7g35OHXRqh87tD/qZsXYGn639jNTYVM468CwO\n6XZIh85Znx8KfuCf3/2TZYVSFOT6I67nqN5H7bH5OwuNylYURenifLvpW3790a/xBX1Ya3EaJ+Py\nxvHoxEdb1N+5JfiDfq6bdh3fbv5Wqo2FghhjuGfsPZx/cNsLfuyOxdsWM2nKJEI2RHJsMh6/h0Aw\nwGMTH2N8//EdPn97o+lSiqIo+xgFVQV8vPpjymrKOKr3Ue3Sp3hXTPtxGr/+6NdYa3E73WQlZOF0\nOPHUeph1xawOL2d5xZQr+H7b9w2aWlTVVpEVn8VHF3+010Wja7qUoijKPka3pG7Nbn1YXVvN8wuf\njwSHnTnkTK457JqIK3x3+IN+7vr8LrZVbcPlcGGxbKvaxoD0ARhj+KHgh1Z33mouPxT+QHJscoNj\nie5ENlZspDZY2+5FUboSGvylKIqyDxGyIa754BqeWfAMvqAPX9DHswue5eoPriZkQ80aY8baGWyr\n2obT4cTtdBPjjMHpcLK2fC3BULDZAt8W+qT2ocZf0+CYL+gjPT6dGGdMh8/fmagwK4qi7EPM2zyP\npYVLyUnMIc4VR5wrjpzEHJYVLmPe5nnNGuOT1Z+QEZ+BwUTE3GAIBAMkxyZzaLdDO/IWALh+5PXU\n+Gsi4uwL+KjwVvDLw3/ZqBs7ZEPNfvHo6qgwK4qi7EOsLl2NP+RvIF7GGPwhP6tLVwNSy/rlRS9z\n4isnctTzR3HnZ3eSX5kfOT8lNgW3w01eWh4hG8If9BMIBXA5Xdw37r4O3dsOc+KAE3lg/APEOGMo\nqi4iZEPcdvRtXHLoJQ3OK/GUcPuM2xn29DCGPTWMWz65hcLqwg5fX0eie8yKoij7ED2Te+IyO//T\n7na46ZncE4D7Z93PW8vfIjk2GZfDxYc/fsicTXOYesFU0uPTOevAs5iycgppcWlkxGdQ7a+myldF\n//T+nDjgxD12L7848BecMeQMtvu2kxSTtFMEeiAU4IqpV7CmbA2Z8dLD+dM1n7KieAVTL5i617q8\n1WJWFEXZhxibO5aeyT0p9hRH3LvFnmJ6JPVgbO5YtlVt492V75KVkEWCO4EYZwzZidmU1pTy7op3\nARjRYwS3jbmNytpKKnwVBIIB+qb25V+n/GuPR0M7jIO0uLRG08LmbJrD+vL15CTm4HQ4cTqcZCdm\ns2X7Fr7e8PUeXWd7ohazoijKPkSMM4aXf/EyD3z1ALPWz8JiGZc7jnuOvYcYZwzrytbhMi6cDmeD\n61wOF4sLFkf+vmzYZZw26DQWFywmOSaZ4d2H73RNZ7OpYhOBUGCn4/6gn40VGzthRe2DCrOiKMo+\nRvek7jz58yfxBXwADVKLeqX0IhAKELKhBnvFgVCAAzIOaDBOenw6x+Udt0fW3Br6p/eXdC5rI5a8\ntRaX00X/9P6dvLrW0y6ubGNMmjHmbWPMSmPMCmPM6PYYV1EURWk9sa7YnfJ9+6b2ZVzeOIqqi/AH\n/VhrKa0pJcGdwDlDz+mklbaOUb1HcWDWgRRWF+IL+KgN1lJYXcgBGQd0eJ51R9Jee8yPAdOttUOA\nYcCKdhpXURRFaWcePvFhLj7kYqprqymsLuTgnIN5+cyX6ZHco7OX1iIcxsHzpz/PZcMuw2IJhoJc\nfMjFTD5jcoeVKt0TtLkkpzEmFVgE9LfNHExLciqKonQ+wVCQQCiwT1fR6iq0pCRne1jM/YAiYLIx\n5ntjzPPGmI4vC6MoiqK0CafDqaLcBWkPYXYBhwFPWWtHANXAnTueZIy51hgz3xgzv6ioqB2mVZR9\nCGthyRJ48kl4/nnYuPdGlCqK0jbaw5XdHZhrrc2r+3sscKe19pSmrlFXtqLUw1r485/htdcgFAJj\nwOWC+++H009v/ZhbtkBcHGRlNe+aQABmz4YffoCePeGkkyA5effXKYqyW/Zodylr7TZjzCZjzGBr\n7SpgArC8reMqyn7D99+LKGdkgLMuT9Tng3vvhXHjIDW1ZeMtXAh33w35+SLQRx4pwp+T0/Q1Hg9c\ndRUsXQrBIDgc8Pe/w0svwQEHNH2doijtTntFZd8A/McYswQYDjzYTuMqyr7PF1+IgDrrFW+IjRXr\n+X//a9lYW7fCtddCUZEIfUYGzJsHv/ylzNEUL78MixdDZiZ06wbZ2VBdDffc07p7UhSl1bRLPLm1\ndhHQLBNdUZQdcLtb911jvP8+eL0irCBu8awsWLNGhHf48Mav++ADSEqS88OkpcGyZVBSIoKtKMoe\nQWtlK0pnM3GiuI79/uix6mrZHx41qmVjbdnSUFxB/jZGBLYp3O6dLerw386uVYZRUfZ1VJgVpbMZ\nPBhuvx22b4fiYhFQa+HxxyE+vmVjHXGEXFtfZINBcYsfeGDT1517rrwMhOr1sy0thaOOEsu5MbZu\nhUcegcsugz/9Cdavb9laFUVplDZHZbcGjcpWlEYoLJQ95ZgYGDMGEltRDsDng4sughUr5PpgUI5d\nfLGI77x5kJAAxx8P6enR6/x+uO02+PxzEXWHA3r1ghdfhB6NVINatw4uvBCqqmQ/3OeT35Mnw6GH\ntv4ZKMo+SkuislWYFWVfo6pKorw/+kj2jc8/H5Yvh1dflZQop1NE9Ikn4Oijo9dZCytXyk9OjrjR\nXU2Eodx4owSt1U/FKiuDIUPgjTc69v4UZS9EhVlRlCjz5kkqVP10rOpq2Xf+6isR6ZYycqTsgdcP\nTrNWrP5Fi8TqVxQlwp4uyakoSlfmo4/kd/0grsREid5esEDc3aWlYk03l/T0hsFqIH8nJLQ8klxR\nlAaoMCvKvo5jF/83//xzOPZYKWQyZozsETfHi3bFFVBZGRXzYFBc2RdfvHNUuKIoLUKFWVH2dU4+\nWX4Hg9Fj1dViMb/2GtTUSHUxpxMefhhef333Y15wAVx5pUSSl5VJbe+UFInqbkud71AItm2TiO9N\nm1pmxSvKPoLuMSvKvo618Le/wb//HS23GRsLtbWwYUM0RSo1VWpkx8XJ3nNzLN+CAsnDXlHXgj1c\n0OSll2DChOh5RUXw7rty3tChcPbZOxct+eor+MMfJFBt+3YR+gEDpLzoaae1y6NQlM5Cg78URdmZ\n1aslECwxEfLyYPRoEe1QKJoilZoqgvnDD01HZNfnppvgqadE6J1OGau2Fvr0kSCwBQvg008lUtvl\nkvMCAZnntdcgN1fGWbFCrPDCQhFll0vOS0mR9bz4otT8VpS9FA3+UhRlZwYOlD3gM8+ETz6JimhY\nmAMBCQLr0UOEcdky2Us++GDZh37ppYYFSKyF//5XBDkcWOZwSPDX1q0itNdfL60sN22SqmRut5QL\nraiQ4iRh/vMfWUtlpZwTHqeyUuZ5+eU9+qgUpTNRYVaU/ZFFi+S3MQ2DvUIhyV9ev14qei1cKBZr\nba3sP//979Fzg0E53lgJUJ9PhD0jQ86Ji5N51q6VczIyYNas6DUbNkQt9PB44d8OB2ze3G63rihd\nHRVmRdkfCe/vJiZGBdHhkM99+4qF6vOJgDocUho0PV2OV1TI+S4XHHKICHR9ca+tFQs6PV3E1emM\nds/y+STozO+X4idhjjwyuv8dtsrDvamDQXG7K8p+ggqzouyPnHSSFAEJBmXfNz5e/s7Olv3nZcsa\n1ukuLZWgrJ9+gvHjpYqYtfCXv0iwl9croltTI4J99NFRYc3JESEOi7e1Iu4XXRQd/6KLZO6UFDnX\n6xWBT06Wl4NJk/bo41GUzkSFWVH2R046CYYNkwYVLlc0CMzrlQCsIUPkM4iIrl4tghneT37wQXjl\nFXF7T58ubu+DDpJo67lzJSjM55Mxe/UScfX5ZN+4qgpOPRWuuSa6nsxMePNNuO46scJ795b1/eY3\n8NZbjdfrVpR9FI3KVpT9lfXr4Xe/k0Cw2lpxLffqJUFgEybAnDnyeetWyXsG6N5dXN1h0Z49u/G2\nkKEQ3HsvTJkSdWMnJ8PNN4uY9+69x25TUboCLYnKbkY+hKIo+yR5edIhaulSsVjD9a1DIZg5Ex59\nVKzin34Sq7pnTxFmkGCuoiLweERwd8ThgPvvFxd0OAhs9OjmpWC1lc2b4YUX4Ntv5UXjyiulqpmi\n7CWoMCvK/sz//icpSdu2iWWbmSliFraCX3pJxPS770Rcw3g8srdcP4CrMQYOlJ89xZYtcN554n5P\nTpb7mjcP/u//4Kyz9tw6FKUNtNseszHGaYz53hjzYXuNqSjKbqiogCVLZF+4pVgrVmVxcTQwq6BA\nLNxAQIKx5s2TvV6fT0pvBgJSAKSqStzSXa0u9uTJ8kxycqKR5MnJkuq1Y9ONHfH5xFMwbZo8B0Xp\nJNrTYr4RWAGktOOYiqI0hrXian75ZRHHQEBKYz7wQPPbOC5fLu7o2FiJzna5JDjL45Ho6DvuEAsU\nZPxgUKKuc3OlcMgJJ3Tc/bWWefN2tuLj4iSqfOtW2R9vjKVL4Ze/FO9BmN/+Fq6+uuPWqihN0C7C\nbIzpDZwC/Am4pT3GVBRlF7z7Ljz3nLieXS7ZF/7wQ8jPF/GsrJTI63Af5sZYs0aEeMgQWLdOBNkY\nyW0Oj5GVJeemp4uI3313813C27aJJZ+XJ0K/J+jdW5poJCREj4UbYaSnNzw3EJDgtSVL4JlnZI89\nnN/t98uLz+GHw4gRe2btilJHe7myHwVuB0JNnWCMudYYM98YM7+oqKidplWU/ZSXXtq5OIjHA++8\nI1W0KivFrXvRReJ2boxeveR3QoKkOo0YAYMHi1ivXy/jhwkXGfnvf3e/No9H3NwnnSRpVMceC//6\nV/PaSbaVK68Uy97jkb8DASgpkTKk9YPUqqqkPOkNN8A//iEvKevWRaPNwz2lP9SdOWXP02ZhNsac\nChRaaxfs6jxr7bPW2pHW2pHZ2dltnVZR9m9KS6NR1CD7o8XFIqCJiSKi3bpJhPK0aY2PcdhhYi0X\nFYmY5efL/nJFhQjbDz/Id2HClbt2x1/+IilY6enyk5Qk3a1uuw0+/jgqmh3BEUfI/DExIsiVlVKz\n++67G543ebLcX2amrDHcNGPduug5xkSFWlH2IO1hMY8BTjfGrAfeAMYbY15th3EVRWmKsWOhvDz6\nd02NuLMTExvmFTudElHdGMbAs89KS8WCAhHmtDQJ9gpbl+vXR6t2hQuD7IqaGpg6VQTP4ZDrNmyQ\n/d1nn4XbbxdL+qef2nT7u+SUU+DLL+Xl4JtvpJXkjvvuH3wg7nVj5MXBGFlvZaUIdCgkPyed1HHr\nVJQmaLMwW2vvstb2ttbmARcAX1hrL2nzyhRFaZrf/EZEtLBQLNxw/eodg5uCQdnjLS9vGNgUJi1N\n3N3hjlJxcSJS/fvL9z6fNJ4oLoZDD21YRrMxPB6ZM/xyUFwslqvTKcKXlSUC/7vfdaxr2+WSe6rv\njq9PuEVl+HP//vJ3MChegpISEfixYztujYrSBFqSU1H2Rnr3hvfeE+HYulXELj5ePoejp1euFFf2\nv/4l1baOPlpKXtZ3T3/1FVxyiZTcDIvS0qXyN4h41tRILvKLLzYMqmqMjAxZW1WVCN369SLuHo+M\nU1AgLwPr1nVux6hzz5U1hl8OMjJkz33UKLj2WnF1/+Uv8jKhKHsYLcmpKHsLgYAEX73xhpTIHDxY\nXLYpKWIZVleLoLrdkmsc3je1VvZchwwRgezfX0plGiMpVqWlYjUuXSq/w3vA8fFy7bBhcs7vfifB\nVbtj3jxJPdq6NZojHQ4eC4VE5K2VwKqm0pfqE345iI1tvPxna/D5JEDt66+j6+vdWwS5W7f2mUNR\n6tGSkpwqzIqyN+DzSYOIWbNEcDMzo0VFRoyIWnY+H6xaFS2duX69iLLfLwI+eLC4ae+7D2bMkDzo\nhARx+4ZCsh8crovtdMr+a1qafO7eXdKLjJG5Fy2SMUeO3LnU5tKlkufs9YrQx8fLGgMBOXfsWNmL\n3l2Bknnz4E9/kqjp+Hi49FL49a/bp7SntbLO8PM66qg9UzJU2S/RWtmKsjcQzqOdO1eqbJ1ySlRQ\n62OtWKozZkRbNW7dKmLrcok1G843jokRF21GhpwTxuUSKxqkYcUdd4gFGgrJ/nNpqewvp6REhTls\neYf3rzdvlr3toUMl79cYWVt2tuRUh/elQe4jO1teIFavljnC1rvDIZW4difKK1eK5e10ylh+v8xb\nWQn33CP3sXKlCPbAgS2vQmaMdLI65JCWXacoHYwKs6J0Bj6fVM+aNy+6z/nPf8JTT8k+Z30WLpRO\nTy5Xw7xln0/ErqoqKsweT7SSV2JiVDxDIRHaUEhKa6akRIU53De5pkZ+wuyYKuT3S/50RoYElIXX\nUlIigj1tWlQcMzOlLGZlJRxwgKyxqkrWd/75Yrk3RXGxuOhfflnW07OnHA8XAHnrLXGvP/hgNBo9\nLw+eeEKqkinKXo5GNihKZ/DBB1KnOitLBCwnRyzD228XUa3PypUieGGRBfkcFsZAQKzHcP7xxReL\nhZqSItZkba2IalqaBHclJYm45ueL2MXGNoyQ3pXl6fGIdV3f5ZuWJtb0ypUNx/j970Xci4uj6Ug9\ne0pRj6aYOVMKktx9t7jtN22SnzDhffPbbxdBTk+Xe9mwQYK2dnx2irIXosKsKJ3BtGnR1KQwSUki\nqDvm+GZny3eJidGcYmvl2p49pXcyiBX61FNiOV5wgbihe/QQ8erdW6p73XWX5CKHrWOnU9bhdst4\ncXEyVv3iJWHC+9g7NoMIhcQa/uSThhHf48dL28gJEyTi+eKL4e23oU+fxp/JggVwxhmyL751a9T1\nvW1bNNWrtlbuy5hohLgxIs7btsH33+/20StKV0dd2YrSGYQjlOsTFtwdi2Ece6wITzAoAlpWJp+T\nkyW6evjwncf/wx/EvZyfL6Kclhb9bvhwcRWHG1a4XDJv2FVeW7tzjnH9Fwi3O/piUFEhwVPWyj7z\n5Mki/hdcIOcOGyY1p0Hu97PPpNFGMCiFTU4+WeasrpbezbW10fu3VixulytqdVdXy/rXr4+up6pK\ngtGqqiSg7KCD5Pkqyl6KCrOidAbnnCPiWFQkghITIwI0ZIjsl9YnLk72W+++WxoupKRIANbDD0O/\nfk3PkZERbWBhrQSPTZkilugll8jnhQvlu5QUEdnaWtmnLS5uaBkbI8LqdMKYMSL4oZDkIzscMGiQ\nWOa1tbL3e+SRDYPBQCLB33knap1/8w18/rnUqp45U14SnM7oS0A40M2YqPv8qqukscQtt8i6i4qi\nIh0KwZtvwo8/yvMKW/+KspehwqwoncGoUWIZ1t+XdbtF1Brb483Nhf/8RwQTosFezeXee3cWxRNP\nlNSjG2+Ul4Pw/m1JiQRZBQJRd3J4T/uoo6L74y+9JGLet29DF3ggAJ9+Cr/6VXT+VaukIEpWVtQl\nHgqJMH//vbjwY2Lku3DlMGuje8Z9+sgc//mPXHfkkbKGDRvke2PknB49JAVq2jRJL9sVc+fKPWzZ\nIvd15ZVyvaJ0MirMitIZvPOOWJcjRkTdycbA44/D6ac3XXGqpYIMYkE2JYrLl8v+b9iyDgSkkUVV\nlbwMlJaK+KamStWwm26SF4rjjpM96oULG7dMd9yHXrxY5qx/X+G85oULYfRoeWno109KgPr9IsrB\noKwv3AkrGJQCK//9L3z0Efz5z7LXnJMTbS3pdsMXX+xamKdMkZQrl0vu57XXpMHGW2+pOCudjgZ/\nKSSQVs8AACAASURBVEpbWLdOcoLHjxf38KxZzbvuo49EUOLiRBRTUmTPuKSk4f5pe7BoUeOi6POJ\nCNfvUxwIyL5uMCi5yEOHinWfkyN9mOvvVY8aFR0nTDAox447ruEawkVKdsTplPsfOhR+/nOZPy9P\nAt7CedUDB0bPt1b22B96SM7p2RMGDGjY7zkQ2PULjN8v5TaTk+Xew8JeViYucEXpZFSYFaW1bNgg\nObnTpon1uHy5uIbfeWf31yYm7pzaE843bu+90V2JYthlHKayMuq6DhO2bP/3v4bXZ2RIkFk4+Kqg\nQMRt0iQ4+OCG5x5zjAhheXl0vu3bRRTHj5f5HnxQ2kOOHi2R3NdfH7WUQTwLS5ZE85wffljmKyqK\njun1yljnntv088jPl7F2fM6JiZIvriidjLqyFaW1PPec/AMf7i8eFyfC8Le/SdrPrso7XnCB7HHW\n308tKZEOTuGCGu3F2LFiUZaXi0vaGBHF5GTZW/3uu+g9hFs15uQ0HMPhiLaCrM9ZZ0kw1owZ4pof\nN04Ee9Ei2XvOzJTzEhLghRfEFZ6fL2vIzIS//z1qhTudEqV98snyd1kZTJ8uwp+UJN6J2lrZi87L\ni/aHjosTl7vDIc/8/vt3fjGoT9hDUL8LFshYvXu3+PEqSnujwqworWXBAhGM+oRFoqCgobW3Iyec\nAFdcIa7TsIs5L09Evb2Jj4fnn29cFHv2lEjnDRuiFntamghpMBjdY46Jke5UjZGbK67rn36S1Ki5\nc0Ugg0G48EJx9TscEnH+8cfRTlaDBu26e1N6uuRl33yzWMXbt8vzHTgw+tKTni4vEY8+Ktb+kCG7\nT5VKSZFUrffek+fgdEYriF1xRasesaK0J9rEQlFay69+JZHB4cApEJdvZaW4RHfXIhGkkMby5TLG\n8OEtr/fcEqxtXBSDQbGat20TYaupkRrVy5fL/TgcEhB1wAHw6qsN92+9Xrj1VmkfWVIiPxkZci6I\n2/n3v5fiIq3F75co8quvlheJ+lZuVZVEY7/7bsvG9Holn/r99+WZJybCnXdK4J2idADaxELpMKyV\n8s4zZ4runHKKxN7sl1x1lQhGdXW0KldpKVx2WfNEGUTw9lQUsDFRwayP0yku7fqMGCH3kpoqXgGH\nQ0pjPvmk5COHeeop2e/NyZGgtdhYsWy3bBFXdnKyeAVaK8xFReLOLi6Wl4mNG6Nu91BInv2u9pOb\nIi5OhPmOO8TF36OHdpZSugxqMSvNxlop6vThh9FYG6cT/vhH+MUvOndtncYnn0iEcHGxpOlceKG4\njN3ujplv82YJevryS3HZnneeBJy1Z8BYICDWe2ZmQ1dzba18N29e9NhRR8k5MTFidYerglkre8+1\ntRIYduSR4kmYOFGi1+tHUTfFggViudfURN3s1dXRfXKQXOy//lVFVenyaD9mpUOYM0f+nczIaNj+\nt6ZGsoSa82/tPkm4Y1NS0s7lNNuTigrZGy0tjZboLCuT/d1//av95gkG4bDD5D9ofcHzekV4v/oq\nemz4cLGKXS5xfVdXy2e/H444AlasEDHPzY2W3hwwQPKQd7UXHArJPnw4SA1EnAsLRdgPOkjc7rvq\nUqUoXYiWCLOmSynN5osvou10w4Q7By5Y0Hnr6nQcDrEuO1KUQVwVZWXiynU6xUrNyYGvv9658UVz\nCQQkMGzcOBHZG24Qd3H4BSD84m6tvBjs6DYeP17WBCK+xoiAJyREm08MGCBWbmKirHftWnFP74pv\nvxWhX7tWxL2sLNpkY9Wq/9/emUdHWZ5t/LqTmewrCQEhBFBBVpWa4laVolIVCnqq1lpRKC3VUkVL\nq1arVStf5dgqflKs1qocRNBiKSBgZdFSCi5hadkUEQsmBJKQhCxkmZk83x9X3u+dTCbrDJmZ5P6d\nMyeZybs8b4xcz70z611FWemmBCzMIjJARN4XkX0isldEZgdjYUr4ER/ffLaBxenWJAX2+EdvrHGK\nR4507pq/+Q3w+9/T9ZGczOSBW28Fpk0DRo+mOJeUMKnrssuAH/2o6flz5nBTUlJCQe7f3554NWEC\nO3klJjY9Jzq6qTvcl6IiZmKXl3PjUF3NjcexY9wF6h+b0s0JRmDGDWCOMWaHiCQD2C4i640x+4Jw\nbSWMmDiRrYWtUlLA9jTmtstBowTEsGFsJemNFXvNyen49YqKmM1sWeAAM66Li1nWtHQp65ELCiiw\nI0Y03xj078/e2e+8Q8t22DD+oaSlsavYBx80b1hitdlsiddfpxgnJzNO4nTyGfPzWWfcmWQvRYkg\nAhZmY0whgMLG7ytFZD+A/gBUmLsZw4ax8uWpp1ilAjCsunCh//G9SpCZNAl48UUKp3eM+Yor/Gdb\nt8WRI3b3L29iYjgIQoTZ2WPGtH6dlBRa2b6MGME/mn37aFWL0LUdE8PGJC3x4Yd0hZ99Nr0EVt9t\njwf41rcYe1aUbkxQUxlFZBCAMQCa+alEZCaAmQCQ05ndvRIW3HIL/23My2O4b+xY9Sx2GampHLbw\n9NMM+CckcCLSrFmdu152NsXOt492fT0wfHjg6xVhOdXDD7OsDKCbe+7c1i3mnBwKclIS5zlXVNDV\n7vEAjzxyemu9FSUMCFpWtogkAfgHgLnGmFar/TUrW1HChAcfZJON9HRmTZeVcce1cmVw66tLS+mW\n7tevbWHdvZt1z3FxjE+73Tx/4kSWRilKBNLlWdki4gTwNoAlbYmyoihhxBNPsAbO5aKL/IILgMWL\ng9/0pFcvWsntsXZHj2aLzYQEJp2dPMlC+ccfD+6aFCVMCdhiFhEBsAhAqTHm3vacoxazooQZVlOQ\n1npXdzUNDew5npzcvCe5okQYXW0xXwpgKoDxIrKr8XVdEK6rKEpXYZVdhRNWj24VZaWHEYys7C0A\nNBtDURRFUYJAmG2RFUVRFKVno8KsKIqiKGGECrOiKIqihBEqzIqiKIoSRqgwK4qiKEoYocKsKIqi\nKGGECrOiKIqihBEqzN2Eigr2/a+oCPVKFEVRlEAI6nQppevxeIBnnuEIW4+HDZxuvx342c+aT/NT\nFEVRwh8V5ghn0SKO6C0v5/AegFP1oqMpzoqiKEpkoa7sCOdPf2Kf/9pawOnkq74eePJJTstTFEVR\nIgsV5gjh3/8G7rgDOP984JprgBUrOAwoP58ubKeTbmwRICYGOHUK+PjjUK9aURRF6Sjqyo4A9u+n\nKANASgpnxv/qVxxTe8YZHKPrjdsNxMcDRUVdv1ZFURQlMNRijgBefJGjadPTGTtOTARSU4GFC4Ef\n/pBWcn09Bbm2lpZ0ZiYwbFjL18zPB7ZuBY4c6brnUBRFUdpGLeYIYN8+irE3sbFAdTVw7bXA6tXA\nBx8w+csaq+t0Ar17N7+WywU88giwZg1F3uMBrroKeOopXhMAKiu5GVi9msfccAM3APHxp/1RFUVR\nejxqMUcAQ4dShL2pr6f4ZmUBc+YAycl8paUBZ55Jgb7//ubX+tOfgFWrgF69aIH36gX8/e/AH/7A\nn7vdwPTpwCuv8B6nTgEvvAD85Ce0xBVFUZTTiwpzkKivZyz4q6+Cf+2ZM/n15EmKY00NUFZGKzY2\nlolgmZlMDBs1Cujbl+8//hg4erTptd54g27wqMb/8lFRFOilS3ntLVuAzz6j4MfF0UrOygLy8oCd\nO4P/bIqiKEpTVJiDwPr1wBVXAN/7HnDddcD3v28nXhUVAf/8J7tyddbiPPdcWrqDBrE0yukEHnoI\n+PGP+fPiYmZiexMVRTe0byewqirA4RPAcDhoGQPAgQO0mkXsn4tw7QcPdm79iqIoSvsJSoxZRK4B\n8ByAaAAvG2OeCsZ1I4EDB4Cf/5zCKEKR27UL+OlPgdxcYPFiiqQxwOjRwIIFtFA7yoUXAn/9K5PA\noqKAujpg3Tpask4n48LJyfbxNTW0ds88s+l1rrgC2Lixafy5rAy49FKuPzu7uXADvOcZZ3R83Yqi\nKErHCFiYRSQawB8AXA0gH8AnIrLKGLMv0Gt3BRUVdNHGxQFf+xpFriMsX04X84kTtkUsQrHbvh3o\n35+WqzEU7EcfBZ5/vvPrjYqi1XvHHXQ5izCh6/hxfk1Lo1s9KgqYN6+5JT1nDtdVXEwBrq6miJeX\nM6583XUU7eJixp+NYXnWoEHAxRd3ft2KoihK+wiGxTwWwEFjzCEAEJFlAKYACHth/tvfgMcfp/gY\nw9jrCy8AI0e2/xpffEFRjImx47YeD13YZ55p96sWYdz3gw8ogmlpTa9z4gTP6927qRvZH0uWMJ6d\nlWUfa2VUX3AB0K8fcPPN/p8jJwdYuZJx6XXrgI8+ApKS6Kb+/e+BZcuA556jZf+vf/H648czk9uf\nJa0oiqIEl2D8U9sfgHfKUz6AC30PEpGZAGYCQE5OThBuGxhffEHrNSnJFrWTJ4E776Sr19fSBJhM\n9eyzLF/KzgZmzaK7uKHBf0zWN6ZsHVNTYwtzfj7jxVZi1dChwP/8D3DOOS2vfd06ICGBceHoaFr7\n6em0bB9/nMLcGhkZzLxevJjHepdiFRQAmzaxXKqmhpsN6/cTTtTU2JuLpCTgu9+lm76tTY2iKEq4\n02XJX8aYl4wxucaY3N7+Cmy7mHfeoYXqLTqpqXRt5+U1P37HDmZBf/opjysqAn7xCwpETAzdyG63\n/TUpic0+vKmspKD37cv3LhcFcudOimVGBjcM06e3Pr6xtJQW8759wH/+w+/r67kRaK+IFhTQ3e5b\nH52YSGEGuOkIR1Gur+d/iyef5O9g2zZukgIJESiKooQLwRDmAgADvN5nN34W1lRVtWxdWVOavFmw\ngNZjWhqt1KQkJlvt3Emxzc6mqKWlAWedxfdDhzJWW1pqt8188kn7vtu20Q2emWn3uU5PpyivX+9/\nbbt3A4cP00p3OOzEr337gPPOY/b2N78JTJxIl3dLgyySkvi1oaHp5y4X1xPObNrE3uFZWWxRatVj\nWwM9FEVRIplguLI/ATBERAaDgnwLgFuDcN022bULePll4NAhYMwYYMaM5lnILTFuHGt3rSxngJYY\nwCQwXz79tLl1GR9Pgb/xRsarMzNtF/a997Jsas0ausBzcthBKzvbPr+kpLkwAvzs2DH/637zTYpR\nVFTTHtkeD63tHTto0VdXc/zjvn386svOnVz7gQO8XnY23eP19cDUqS3+2sKCrVvtjYyFw8HfyZ49\nQJ8+oVuboihKoAQszMYYt4j8FMDfwXKpV4wxewNeWRts3sySJICCsnIlO1gtXQoMGdL2+RdfzClN\n69bZ5UwijPf6K2c6+2xaq96x59paiuBjjwGTJ9PKdTiY2TxqFK85ZQqF2591PmwYP/feHBhDi/zc\nc/2vu6iIVvKgQSxfqq7mmoqL+Rrg5buIj2eXrzvvbPr5u+8yOzslxc7I3r+fxzzwAGO14Uzfvv43\nNEDnStEURVHCiaDk2Rpj1gJYG4xrte9+TJCKibFrd+PjaYEuWMCsYl+OHgX++Ec2+7CSn+bNo3Bu\n2EBr+NvfBoYP93/PWbMY16yo4L0qK2ldPvoohfTrX+cLoGj8+c+05k+epKg/+CBwySVNrzl8OHD1\n1RTKhASKdHU1M6t9j7UYN47Z0gDjv7GxrGmurW3eG9tqMvL557YwGwM88wyfNzGRQlZXR3f7qFH0\nOoQ7kyfTbV1VRZe8Mcxqz8lh9zNFUZRIRkwIGiDn5uaaPH8ZVu2kshK46KLmpUVWAtTWrU2PLyoC\nvvMdik9KCuOop04Bd98N3HVX+++7aRMF+tAhil5KCq3RX//atngB4H//l5uA1FQKZ2Ul7/n6680t\nYbcb+MtfgNde47PcfDM7iLU0MKK6Grj1VpY3xcXZ7vdzzgE++YRxVyt+bAnWm28CI0bwM5eLsWjv\nUiuArvCqKrrCI4GtW7nZOXmSG6GRI1nu1b9/qFemKIrSHBHZbozJbc+xEdmSMz6eFqbL1fTz2lr/\npULLljED2er/nJzMZKGXXqJotpfdu+1Zx9HRPHfePFra1lpqa4FFi3j9uDiKX0oKf/bSS82vuXUr\nxzceO8ZM6X/8o/U1JSYyqeuBB9hJbPx4xtX37qUre88efl9Xx5GO6ekUc2v/5XDQFeyb4FZdDQwe\n3P7fRai55BJulP7yF8bxly1TUVYUpXsQkcLscAC3306xtQSxro5i86MfNT8+L6952Y/TSbFq7zxi\nt5t1v2Vl/N7p5DUdDsa7ly/ncaWl9s+9SUho3mv6yy+Be+7h2nv1oot9+/a2JzklJfH5X3sNGDiQ\nruo+feiKTkpizHjHDgr8V1/RXd6rFzBpEmu0776bPzt1ivepquKGworZRwoOBzPfw6AsXlEUJWhE\npDADdEHPmEFxKS2lK/ZXvwImTGh+7ODBtsvXoqHB7rTVHurrKWY1NTy3qorx5vp6CvHbb/O4zEw7\n7utNdTUtXO/7z5/PtVuZ3FZ3sAMHmE3dHpYvZ4mWCK3pUaPsrOScHFrRbjfXs2MHMHs2BW3uXIq4\nVa41fz7LrLz54gsmtk2dysYqWoqkKIpy+onYJosOBzOL77qL4paV5b9bFwDcdhuztisq6Mb2eBh7\nnTiR57WH+HgK3aFDPD8qimLodlNUrXnJMTG0POfNo5UcF8c4qNNpj2+0RjZu3kyxLy3luoYMoYs8\nKorHWBQXcxxjfT3vWVzMzcb48fwsLs4+1hieGxVF1zjAezc02A1O5s9nwtsNN3D9/lpt5uXR++By\n8fo7dtBtvGyZWqiKoiink4gVZouEBL5aY8gQJmM98QRd1w4HWzjef799jGWxtoQIj7e6YnmfI2In\nXAG0MNPSGFM+doyToe691y7j+u1vWRfdp4/dVrOiAigstEuBrOzw1avZp7quju07rQYg6ek89hvf\nYJmW9wbD7abruqqqaa9uY/i7OnaMruv4eP+ibAzwm9/wHMujkJzMDcHChcBTHZwdZgzXuHgx3exX\nX01XvG+/cEVRFKUbCHN7uegiJgmVl1OQ4uIoik8/Dbz1FoVq/Hi22fRuAuJNv34sOzp61LaanU6K\nnXdWtghLeiZPbn6NsjK6vVNTbVeyNQu5sJBu8FmzGG8uKqIox8dz3Q0N/Hl5Oa3WwkK7y1hBAQUw\nKooiHR9Pgbb6XVuCXlvLa3tb2b5UVTEe7uvmT01luVlHWbCAGyMrJv/ii8DatbTAvUdVKoqiKD1I\nmAG75SVAEbvvPgpNejqFbONGdhNbvdrOpPbGaqFpdZlyOulS9niaxo9b4u23aYkWFPA6TidrnKuq\n7DGMCxbYDT62bKG4xsbS9R4dTXF2uWj1ZmezpvnDD7n2NWvoas/JYdvOxES60a1M8owMurMffbR1\n70BcHF3yvkls9fUdn8lcWsp67l69bOs8MZHW/6pV7I6mKIqi2ERs8legfPYZS5Ws2HR0NC3EEydo\nzfmyYwcbl1i10zExFMkjRyicbQnM/v2c/JSQQIEEKLAHD9Kl3acPY9Pjxtmi6fHQ4t27lzHsykp+\ndblote/fb7un//tfCnlJCUXf7aaIzpjBGuasLFqnjz3GWunWcDp5TGmp3WHL5eK9p0/n+6oq4L33\nuBkoKWn5Wp9/zufxdZk7HNxQKIqiKE3pURazN0eONO+3DPD9p582P/6tt/h18GBalN69rOfObbsG\neOVKe5rVwIEUVZeLwpufz5jyrFlNzxk4kAJsJZp5Z287nYxLjx5NYfS1SpOS+PmECSy/WrOG929r\nnf/8J7tqHTlC1/Xx47S2jeF1rr+eVvrs2Xamuwgz4m+6qfn1MjN5X98YvtvdtE2ooiiKQnqsMA8c\n2FToLIzx35aztJRiGBXFRhZWI5Py8rbnHwN0KVuJWLGx7ABWWsrXXXfRWvattd64kda1FV/2XqPH\nQ/GtqOBGwtcqFeH9XnyRwm/NjH7jDeCWW4CHH26+Kfnb3/h5TAw3H5WVFOV589hbPDmZn82ezWtb\nln99PV30F1zQfIjIWWdxKEhenj1Fq6qKa/Un5IqiKD2dHuvKHjqU3aOKiigsHg/jvJmZHELhy5VX\nMjPaavwhwvdOJ9thelNYSLf1ZZcB117L2PI3v0lxtM6PiqLQZWWxjCo2lolZb75Jd/E999A1nZVF\nq9gSy8REfh040B6C0auXvcnwpq6O4xFTU3md3r157JtvskOYN243E+GSk5ktHRfH410udiOzkrS2\nbePvyzsTPiaGv78NG/z/rp97jol11kYkLQ144YXI6jSmKIrSVfRYi1mE9bwLFrBJR2Uly3h+/nP/\nmcLf/jYFdu9eirHHw2s8+WTTDOfiYlqCBw7QMgSA999nhvall1Jso6N5fnQ0+2wnJ1PsZsxg56+6\nOlrYVknT6NEU1tJS2yrOyGCG9003MYY8dCgtZ2+rtL6e1/ZO4LLu/a9/NU1YKy7m78Cygi2SktiD\n28LlsjcAFRW0xqurec9du/z/rtPSgOefp+VfVUWPQ2vJZ4qiKD2ZHivMAEXvF7/gqy0SEtgDe+1a\nCm1mJkVx5Mimxy1bxo5Z1jhGEQrhqlV0K990Ey3L1FTGay23+caNnJFcVkbxssqvysrYBWzgQAph\nTQ3PPXmSbuN77uE9Fi5knfX27Tw3LY0egdWrKabe4izSfEhGWhpF2/fY2lp2E7O48EJe//hxJq5Z\nYyoBjt1csYKNS/yRlqa1y4qiKG3Ro4W5o8THc0rVd77T8jEffUQBdThsq9Dq5vXyy0yuuuoqfl5e\nTouzXz9a0jU1FGWns2nM2JqadcklwJgxTJoaMgS4/HK721lWFjuhPfMMLdfPP2fiWGEh75GaSte0\n28266bS0pnOg4+M51eq11+judjp5nNvdtP94ZiYwbRo3M5bXwOPhOlJS6IW4/nq1iBVFUTqLCnOQ\nycmhUHlbnVaCmeXatmqJN27k+4wMWqWWS9hb1KyGIb/9LV3tLbF9O/CDH1BsDx+m5Vtezp+53SwD\nKynh9fr2ZRb1ihVs/GG54n/2M/78jTfs7mGPPUYr2Zu8PD6f9wbCanPqcvE5tXGIoihK5+ixyV+n\ni2nTmMhlWbnGUKzi45kMBtDafO89Wq0ZGRTkDRsoih4Pj7HOi42lcFqNUVrid7/j+VZ9dVwcz3e5\naMlaWdqxsXxlZAAff0wRtnA4GGPfto2tRzdtYvKaN3V1dLmnpPD42Fhe1+FgDDw1lQlqiqIoSudQ\nYQ4yQ4fSnexwMD5bX0+hGjyYZUb5+Uy8ysy0Y7OJifz+G9+guNbV2d26srLo6h4zpul9PB4eY7Fn\nD8XSKqsyxs4Ct17R0bRyS0vt/t4rVjR/hthYri/Kz1+Hw0HRt3p6W0M8rA3FT37i/zxFURSlfQT0\nT6iIPC0in4rIf0RkhYhoag+YXZ2XR5G69loOsFixgjW9JSV2S09vYmJoba5bxyzrAQMofiNHsuGH\nJeLl5cBDD7E2+PzzWf+8Zw/Pramxh2lYAu3tFrdmUFvXsnprd4ToaCawuVyMc8fEcPPR0EBvwa23\ndvjXpSiKongRaIx5PYBfGmPcIjIPwC8BPBD4siIfy3L25ayz+NU3+7mujsldl1/OVpUHD9r1ypa4\nGsOa5717Gf9taACWLrUTtkpKaJkPGgR8+SXPsUZTxsXZVnZCArO96+paT2RrifvuY/33hg2Mqbvd\nFGt/TUsURVGUjhGQMBtj3vN6+yGAGwNbTvcnOZlW7ty5zN62EsXOOccWSYeDzUN82b6dtcpWv+7P\nPqO7HLBjvl9+yeEWOTkU3oICCqc10EKEruzyctYTT5zY8WeIi2Mzkvx8CvSgQe2fa60oiqK0TjCj\ngT8AsK6lH4rITBHJE5G84uLiIN428ujTp2kM2BrLWFPT+nn5+XaGd20thdayuuvqaF2feSb7Y2dk\n0DK+8EK6xq1uXamptvu6vJwduDpCaSnrpceMASZNAl591e6ZrSiKogROm8IsIhtEZI+f1xSvYx4G\n4AawpKXrGGNeMsbkGmNye/sO+u1BuN0sferTBzjvPArc8OEsoVq0qPVzrT7UxvA6VmmViN0iMzYW\n2L2botu7N2PCyck8p7qa4h8XZ8+jnj/fTtxqi4YG4Ic/5ECM9HSK/5YtwNSp9kxpRVEUJTDaFGZj\nzFXGmFF+XisBQESmAZgE4PvG+HZrVnwpLGSdr2/nraQkilxrjB4NfP3rdB9bsdy6Ooqx1VGrtpZW\nsW+s15rwZE2qsiZU1dayKUp7+OQTxr4twY+KYvZ2SUnLfbIVRVGUjhFoVvY1AO4HMNkYozZTO0hL\na1peZFFXx5hva4iwt/fMmcyGzsqioJ9xBi3hoiJe44Ybmg60iI62m4hYbmxrDcnJjEO3h4ICe0qV\nNx4Pm5ooiqIogRNojHkBgGQA60Vkl4j8MQhr6tYkJ3OgRUmJLc61tXRNT5vW9vkJCSy/2rIFOHSI\ngzUuvpiC/OMfc3LUjTdStIuLed26Ogq4w8FYdm2t3XikVy/g7LPbt/azzrLnQnsTHd18wpaiKIrS\nOQISZmPM2caYAcaY8xtfdwZrYd2Zhx9mP+nyciZTAcATT1Bg28uWLUzyuvlm4IMPgNxcCnN6OsV/\nyRKOr6yu5vGTJjEz2+Oxe2QnJABjx7Ieuj2ce67tSq+tpeAfP84SrXHjOvIbCJyTJ1nypSiK0t2Q\nUISFc3NzTV5eXpffN9woL+erXz97GEV72LwZuO02WsRRURTahga2/FyzhjFnbw4fBqZMocVcVmZb\n6/37sxFKR/pa19Sw4cny5bTGJ04EZs3quqlRR4+yz/fHH9N6HzWKpWdWYpyiKEo4IiLbjTG57TpW\nhTnymDKFyVbeHcRcLgrV4sW0xr15/nkOq/CtNT5xghOvxo7tmnUHirUROHqULngRbjRSUtgxzep6\npiiKEm50RJi1q3EEsm8fRcm7naYVP16/vvnxpaX+W2+KsEwrUti6lVntVh9vEQp0ebk9qUtRFCXS\nUWGOQLKz7eYkFg0NFGd/LuXLLrMHWVi4XHx/3nmnf73B4vhx/zXXbjcFW1EUpTugwhyBPPQQpyFd\nGQAABrtJREFUM6Hr6ijIVg/szExmZPty+eVMLCsutmPM5eVsDZqZ2fXr7yzDhtFS9t5gGMMNyciR\noVuXoihKMAl0iIUSAq6+Gli4EJgzh9nJMTGcRDV3bvPxkACFa+FC4N13+UpKYl/uSIktW4waxU3G\n++/b8eSqKj5zRzLaFUVRwhlN/opgjGH7zepqilZHsqsjlfp6YNkyOyt88mTg9tvtlqSKoijhiGZl\nK4qiKEoY0RFhVle20iYnTgBvvAFs28ZxkrfdRgtdURRFCT4qzEqrFBWxu1hxMQdv7N4NrF0LPPss\ncOWVoV6doihK90OzspVWefVVinJWFmPYmZkciPHEE+0fF6koiqK0HxVmpVU2b27eUSsxkWVXWjus\nKIoSfFSYlVbp3ZuZ0N5YlnJKStevR1EUpbujwqy0yvTpFGZLnBsamAx23XUqzIqiKKcDFWalVa64\nAnjwQXYZKyvja8IE4JFHQr0yRVGU7olmZSttMnUqO4UdPgxkZDSfUqUoiqIEDxVmpV0kJADDh4d6\nFYqiKN0fdWUriqIoShgRFGEWkTkiYkQkgmYVKYqiKEr4EbAwi8gAABMAHAl8OYqiKIrSswmGxfws\ngPsBdP00DEVRFEXpZgQkzCIyBUCBMebf7Th2pojkiUhecXFxILdVFEVRlG5Lm2MfRWQDgL5+fvQw\ngIcATDDGnBSR/wLINcaUtHlTkWIAhzu+3C4jE0CbzxFh6DNFBvpMkUF3e6bu9jxA+D3TQGNM7/Yc\n2Ol5zCIyGsBGAKcaP8oGcBTAWGPMsU5dNEwQkbz2zs2MFPSZIgN9psiguz1Td3seILKfqdN1zMaY\n3QD+v9VERyxmRVEURVH8o3XMiqIoihJGBK3zlzFmULCuFQa8FOoFnAb0mSIDfabIoLs9U3d7HiCC\nn6nTMWZFURRFUYKPurIVRVEUJYxQYVYURVGUMEKFuQ26Ux9wEXlaRD4Vkf+IyAoRSQv1mjqLiFwj\nIp+JyEEReTDU6wkEERkgIu+LyD4R2Ssis0O9pmAhItEislNE3gn1WoKBiKSJyPLG/4/2i8jFoV5T\noIjIfY1/d3tEZKmIxIV6TR1FRF4RkSIR2eP1WS8RWS8inzd+TQ/lGjuCCnMrdMM+4OsBjDLGnAvg\nAIBfhng9nUJEogH8AcC1AEYA+J6IjAjtqgLCDWCOMWYEgIsAzIrw5/FmNoD9oV5EEHkOwLvGmGEA\nzkOEP5uI9AdwD1jqOgpANIBbQruqTvEagGt8PnsQwEZjzBCw50bEbOBVmFunW/UBN8a8Z4xxN779\nEGwKE4mMBXDQGHPIGFMPYBmAKSFeU6cxxhQaY3Y0fl8J/mPfP7SrChwRyQYwEcDLoV5LMBCRVACX\nA/gzABhj6o0x5aFdVVBwAIgXEQeABLBRVERhjNkMoNTn4ykAFjV+vwjA9V26qABQYW6BjvQBj1B+\nAGBdqBfRSfoD+MrrfT66gZABgIgMAjAGwEehXUlQmA9ubBtCvZAgMRhAMYBXG93zL4tIYqgXFQjG\nmAIAvwO9goUAThpj3gvtqoJGH2NMYeP3xwD0CeViOkKPFmYR2dAYV/F9TQH7gD8a6jV2lDaeyTrm\nYdB9uiR0K1V8EZEkAG8DuNcYUxHq9QSCiEwCUGSM2R7qtQQRB4CvAXjBGDMGQDUiyD3qj8a46xRw\n09EPQKKI3BbaVQUfw7rgiPF8Bq3BSCRijLnK3+eNfcAHA/i3iAB0+e4QkbDvA97SM1mIyDQAkwBc\naSK3iL0AwACv99mNn0UsIuIERXmJMeavoV5PELgUwGQRuQ5AHIAUEXndGBPJ/+jnA8g3xljejOWI\ncGEGcBWAL40xxQAgIn8FcAmA10O6quBwXETOMMYUisgZAIpCvaD20qMt5pYwxuw2xmQZYwY1djTL\nB/C1cBflthCRa0DX4mRjzKm2jg9jPgEwREQGi0gMmKyyKsRr6jTC3d+fAew3xjwT6vUEA2PML40x\n2Y3//9wCYFOEizIa////SkTOafzoSgD7QrikYHAEwEUiktD4d3glIjyhzYtVAO5o/P4OACtDuJYO\n0aMt5h7IAgCxANY3egI+NMbcGdoldRxjjFtEfgrg72AW6SvGmL0hXlYgXApgKoDdIrKr8bOHjDFr\nQ7gmxT93A1jSuCE8BGB6iNcTEMaYj0RkOYAdYHhrJyKwlaWILAUwDkCmiOQD+DWApwC8JSIzwDHD\nN4duhR1DW3IqiqIoShihrmxFURRFCSNUmBVFURQljFBhVhRFUZQwQoVZURRFUcIIFWZFURRFCSNU\nmBVFURQljFBhVhRFUZQw4v8AUfdtYAuYs3EAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b6f2250>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#加载boston数据集——数据并非numpy类型，而是bunch类型（含data自变量和target隐变量，继承自dict的设计模式）\n",
    "boston = datasets.load_boston()\n",
    "#print(boston.DESCR)\n",
    "X, y = boston.data, boston.target\n",
    "print len(X),len(y)\n",
    "#下载加州房价数据\n",
    "#housing = datasets.fetch_california_housing()\n",
    "#print(housing.DESCR)\n",
    "#创建聚类数据集\n",
    "import sklearn.datasets as d\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "blobs = d.make_blobs(200)\n",
    "f = plt.figure(figsize=(8, 4))\n",
    "ax = f.add_subplot(111)\n",
    "ax.set_title(\"A blob with 3 centers\")\n",
    "colors = np.array(['r', 'g', 'b'])\n",
    "ax.scatter(blobs[0][:, 0], blobs[0][:, 1], color=colors[blobs[1].astype(int)], alpha=0.75)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.,  1.,  1.])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据预处理\n",
    "from sklearn import preprocessing\n",
    "import numpy as np\n",
    "from sklearn import datasets\n",
    "#加载波士顿数据集\n",
    "boston = datasets.load_boston()\n",
    "X, y = boston.data, boston.target\n",
    "X[:, :3].mean(axis=0) #前三个特征的均值\n",
    "#array([  3.59376071,  11.36363636,  11.13677866])\n",
    "X[:, :3].std(axis=0) #前三个特征的标准差\n",
    "X_2 = preprocessing.scale(X[:, :3]) #标准\n",
    "X_2.mean(axis=0)\n",
    "#array([  6.34099712e-17,  -6.34319123e-16,  -2.68291099e-15])\n",
    "X_2.std(axis=0)\n",
    "#array([ 1.,  1.,  1.])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x108a18c50>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n+S7XWQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108900190>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "#%matplotlib inline\n",
    "#随机生成一个实数，范围在（0.5,1.5）之间\n",
    "cluster1=np.random.uniform(0.5,1.5,(2,10))\n",
    "cluster2=np.random.uniform(3.5,4.5,(2,10))\n",
    "#hstack拼接操作\n",
    "X=np.hstack((cluster1,cluster2)).T\n",
    "plt.figure()\n",
    "plt.axis([0,5,0,5])\n",
    "plt.grid(True)\n",
    "plt.plot(X[:,0],X[:,1],'k.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x10b3e4dd0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108943dd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#coding:utf-8\n",
    "#k-mean聚类分析：http://www.cnblogs.com/wuchuanying/p/6264025.html\n",
    "#我们计算K值从1到10对应的平均畸变程度：\n",
    "from sklearn.cluster import KMeans\n",
    "#用scipy求解距离\n",
    "from scipy.spatial.distance import cdist\n",
    "K=range(1,10)\n",
    "meandistortions=[]\n",
    "for k in K:\n",
    "    kmeans=KMeans(n_clusters=k)\n",
    "    kmeans.fit(X)\n",
    "    meandistortions.append(sum(np.min(\n",
    "            cdist(X,kmeans.cluster_centers_,\n",
    "                 'euclidean'),axis=1))/X.shape[0])\n",
    "plt.plot(K,meandistortions,'bx-')\n",
    "plt.xlabel('k')\n",
    "plt.ylabel(u'平均畸变程度')\n",
    "#plt.ylabel(u'平均畸变程度',fontproperties=font)\n",
    "#plt.title(u'用肘部法则来确定最佳的K值',fontproperties=font)\n",
    "plt.title(u'用肘部法则来确定最佳的K值')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.91111111111111109"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#logistics回归详解：http://blog.csdn.net/xlinsist/article/details/51289825\n",
    "from sklearn import datasets\n",
    "import numpy as np\n",
    "from sklearn.cross_validation import train_test_split\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "iris = datasets.load_iris() # 由于Iris是很有名的数据集，scikit-learn已经原生自带了。\n",
    "X = iris.data[:, [2, 3]]\n",
    "y = iris.target # 标签已经转换成0，1，2了\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 为了看模型在没有见过数据集上的表现，随机拿出数据集中30%的部分做测试\n",
    "\n",
    "# 为了追求机器学习和最优化算法的最佳性能，我们将特征缩放\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "sc = StandardScaler()\n",
    "sc.fit(X_train) # 估算每个特征的平均值和标准差\n",
    "sc.mean_ # 查看特征的平均值，由于Iris我们只用了两个特征，所以结果是array([ 3.82857143,  1.22666667])\n",
    "sc.scale_ # 查看特征的标准差，这个结果是array([ 1.79595918,  0.77769705])\n",
    "X_train_std = sc.transform(X_train)\n",
    "# 注意：这里我们要用同样的参数来标准化测试集，使得测试集和训练集之间有可比性\n",
    "X_test_std = sc.transform(X_test)\n",
    "\n",
    "# 训练感知机模型\n",
    "from sklearn.linear_model import Perceptron\n",
    "# n_iter：可以理解成梯度下降中迭代的次数\n",
    "# eta0：可以理解成梯度下降中的学习率\n",
    "# random_state：设置随机种子的，为了每次迭代都有相同的训练集顺序\n",
    "ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)\n",
    "ppn.fit(X_train_std, y_train)\n",
    "\n",
    "# 分类测试集，这将返回一个测试结果的数组\n",
    "y_pred = ppn.predict(X_test_std)\n",
    "# 计算模型在测试集上的准确性，我的结果为0.9，还不错\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSVXIOwzDJAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10ba16950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "def sigmoid(h):\n",
    "    return 1.0 / (1.0 + np.exp(-h))\n",
    "\n",
    "h = np.arange(-10, 10, 0.1) # 定义x的范围，像素为0.1\n",
    "s_h = sigmoid(h) # sigmoid为上面定义的函数\n",
    "plt.plot(h, s_h)\n",
    "plt.axvline(0.0, color='k') # 在坐标轴上加一条竖直的线，0.0为竖直线在坐标轴上的位置\n",
    "plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted') # 加水平间距通过坐标轴\n",
    "plt.axhline(y=0.5, ls='dotted', color='k') # 加水线通过坐标轴\n",
    "plt.yticks([0.0, 0.5, 1.0]) # 加y轴刻度\n",
    "plt.ylim(-0.1, 1.1) # 加y轴范围\n",
    "plt.xlabel('h')\n",
    "plt.ylabel('$S(h)$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEKCAYAAAARnO4WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucVXW9//HXZxgIRkzw0skgwI6JIXfQUDsOgpeTetCO\nkhle0PyR2g8Qfl0oK6aLv+rYI0RLDVOx5IQeyk73MnW8/ToqEHjBMDNQ8AKijKCiwHx+f6y9mT3D\nzKy1915r39b7+Xisx7DWXpfPXtlnf/dnf7/fZe6OiIjUvrpyByAiIqWhhC8ikhJK+CIiKaGELyKS\nEkr4IiIpoYQvIpISSvgiIimhhC8ikhJK+CIiKVFf7gByHXjggT5kyJByhyEiUjVWrFjxirsfFGXf\nikr4Q4YMYfny5eUOQ0SkapjZ+qj7qqQjIpISSvgiIimhhC8ikhKJ1fDNbChwe86mDwBfdfer8znP\nzp072bBhAzt27Ig1vjTq3bs3AwcOpGfPnuUORUTKILGE7+5rgdEAZtYD2Ajcme95NmzYwL777suQ\nIUMws5ijTA93Z8uWLWzYsIFDDjmk3OGISBmUqqQzGfi7u0f+NTlrx44dHHDAAUr2RTIzDjjgAH1T\nEkmxUiX8TwA/LfRgJft46D6KpFviCd/MegFTgP/q4vUZZrbczJZv3rw56XBERIo2cfFEJi6eWO4w\n8laKFv5HgZXu/nJnL7r7Incf7+7jDzoo0mCxirV48WJeeOGFcochItKpUoy0PYciyjnVZPHixQwf\nPpz3ve995Q5FRBKQbdXft/6+duvN05vLE1CeEm3hm9k+wInAz5O8TjtLlsCQIVBXF/xdsqSo073x\nxhuceuqpjBo1iuHDh3P77bezYsUKGhsbGTduHCeffDIvvvgiy5YtY/ny5UybNo3Ro0fz1ltvcffd\ndzNmzBhGjBjBRRddxNtvvw3AvHnzGDZsGCNHjuSzn/0sAL/61a/48Ic/zJgxYzjhhBN4+eVOvxCJ\niBTO3StmGTdunHe0Zs2avbZ16bbb3Bsa3KFtaWgIthdo2bJlfvHFF+9Z37p1qx999NG+adMmd3df\nunSpX3jhhe7u3tjY6I8++qi7u7/11ls+cOBAX7t2rbu7n3feeb5gwQJ/5ZVX/LDDDvPW1lZ3d3/t\ntdfc3f3VV1/ds+3GG2/0uXPnFhxzd/K6nyLSqcZbGr3xlsZyh+Hu7sByj5hja2uk7RVXwJtvtt/2\n5pvB9gKNGDGCu+66iy984Qs88MADPP/88zzxxBOceOKJjB49mm9+85ts2LBhr+PWrl3LIYccwmGH\nHQbABRdcwP33389+++1H7969+dSnPsXPf/5zGhoagGC8wcknn8yIESO46qqrePLJJwuOWUSkMxU1\nW2bRnnsuv+0RHHbYYaxcuZLf/va3fPnLX2bSpEkcccQR/PnPfy7ofPX19TzyyCPcfffdLFu2jO9/\n//vcc889zJw5k7lz5zJlyhSam5tpamoqOGYRSVa11Ow7qq0W/qBB+W2P4IUXXqChoYFzzz2Xz33u\nczz88MNs3rx5T8LfuXPnntb4vvvuy7Zt2wAYOnQo69at45lnngHgJz/5CY2NjWzfvp2WlhZOOeUU\nFixYwOrVqwFoaWlhwIABANx6660Fxysiyev37X70+3a/coeRt9pq4V95JcyY0b6s09AQbC/Q448/\nzuc+9znq6uro2bMn119/PfX19cyaNYuWlhZ27drF5ZdfzhFHHMH06dO55JJL6NOnD3/+85+55ZZb\nmDp1Krt27eLII4/kkksu4dVXX+X0009nx44duDvf+973AGhqamLq1Kn079+fSZMm8Y9//KPYuyEi\n0o4FNf/KMH78eO/4AJSnnnqKD33oQ9FPsmRJULN/7rmgZX/llTBtWsyRVq+876eI7JFt1be83QLA\nfu/aD4Ct87aWLSYzW+Hu46PsW1stfAiSuxK8iBSh2vrXR1V7CV9EJCHZlny2pV/Oln0hlPBFRDKq\nfSRtGCV8EZE8VVvLPksJX0QkI9uSr7WWfVZt9cMXEZEuKeGXwVe/+lX+9Kc/5X1cc3Mzp512WgIR\niUiu5unNNde6hxos6bhD7oOdOq6XLo7MZEV1e3+mfv3rXy9JDLt27aK+vub+JxapCeUoG9VUC7+p\nCebMCZI8BH/nzAm2F2revHn84Ac/yLlGE9/97ne56qqrOPLIIxk5ciTz588HYN26dQwdOpTzzz+f\n4cOH8/zzzzN9+nSGDx/OiBEjWLBgAQDTp09n2bJlADz66KMcc8wxjBo1iqOOOopt27axY8cOLrzw\nQkaMGMGYMWO4995794rr1Vdf5YwzzmDkyJFMmDCBxx57bE985513HsceeyznnXde4W9cRGpOzTT/\n3GHrVli4MFhfsCBI9gsXwuzZhbf0zz77bC6//HI+85nPAHDHHXfwhS98gYceeohHHnkEd2fKlCnc\nf//9DBo0iL/97W/ceuutTJgwgRUrVrBx40aeeOIJALZubf/L/jvvvMPZZ5/N7bffzpFHHsnrr79O\nnz59WLhwIWbG448/zl//+ldOOukknn766XbHzp8/nzFjxvCLX/yCe+65h/PPP59Vq1YBsGbNGh58\n8EH69OmT/xsWkUSVs+tnzSR8syDJQ5Dks4l/9uxge6FlnTFjxrBp0yZeeOEFNm/eTP/+/Xn88cf5\n4x//yJgxYwDYvn07f/vb3xg0aBCDBw9mwoQJAHzgAx/g2WefZebMmZx66qmcdNJJ7c69du1aDj74\nYI488kgA3v3udwPw4IMPMnPmTAAOP/xwBg8evFfCf/DBB/nZz34GwKRJk9iyZQuvv/46AFOmTFGy\nl5pVqz1oSqFmEj60Jf1ssofikn3W1KlTWbZsGS+99BJnn30269ev54tf/CKf/vSn2+23bt069tln\nnz3r/fv3Z/Xq1fzhD3/ghhtu4I477uDmm28uLpgIcmMQkcpSzq6fNVXDz9bsc+XW9At19tlns3Tp\nUpYtW8bUqVM5+eSTufnmm9m+fTsAGzduZNOmTXsd98orr9Da2sqZZ57JN7/5TVauXNnu9aFDh/Li\niy/y6KOPArBt2zZ27drFv/zLv7Ak82jGp59+mueee46hQ4e2OzZ3n+bmZg488MA93xBEatHExROZ\nuHgi962/j/vW37dnXaKrmRZ+Ntlna/a5NXworqV/xBFHsG3bNgYMGMDBBx/MwQcfzFNPPcXRRx8N\nQN++fbntttvo0aNHu+M2btzIhRdeSGtrKwDf+ta32r3eq1cvbr/9dmbOnMlbb71Fnz59+NOf/sRl\nl13GpZdeyogRI6ivr2fx4sW8613vandsU1MTF110ESNHjqShoUFz6ItUmXKUpGpqeuSmpuCH22xy\nz34I9OtXXE+dWqLpkaXaqYbfXmqnR25qat8bJ1vTL0c/fBGRSlNTCR/2Tu5K9iK1RS37wtXUj7Yi\nUt3i+CG2FD/mVusPxkr4IiIpkWhJx8z6AT8ChgMOXOTuf07ymiJSfeIYfVqKEazV/oCUpGv4C4Hf\nu/tZZtYLaEj4eiIVp9qSgtSuxBK+me0HHAdMB3D3d4B3krpeUo4//njmzZvHySefvGfb1VdfzerV\nq9m2bdueSdCiuvjii5k7dy7Dhg3rcp8bbriBhoYGzj///ILjFqkm2Q/D7LNiC/lwLMUI1mp/QEqS\nLfxDgM3ALWY2ClgBzHb3NxK8ZuzOOeccli5d2i7hL126lP/4j//guOOO22v/sCmJf/SjH4Ve85JL\nLiksWKko1f71v5Sy96bl7ZZ267pX8UryR9t6YCxwvbuPAd4A5nXcycxmmNlyM1u+efPmWC4c5y/o\nZ511Fr/5zW94553gy8m6det44YUXeP/738/w4cMBWLx4MVOmTGHSpElMnjyZ1tZWLrvsMg4//HBO\nPPFETjnllD3fBCZOnEh2cFnfvn254oorGDVqFBMmTODll18G2qZgBnjmmWc44YQTGDVqFGPHjuXv\nf/8727dvZ/LkyYwdO5YRI0bw3//937G8V0m3WundUoqHl1TrA1KSbOFvADa4+8OZ9WV0kvDdfRGw\nCIKRtgnGU5D999+fo446it/97necfvrpLF26lI9//ONYhw7+K1eu5LHHHmP//fdn2bJlrFu3jjVr\n1rBp0yY+9KEPcdFFF+117jfeeIMJEyZw5ZVX8vnPf54bb7yRL3/5y+32mTZtGvPmzeNjH/sYO3bs\noLW1lV69enHnnXfy7ne/m1deeYUJEyYwZcqUvWKS8qr2r/+lpHtVGoklfHd/ycyeN7Oh7r4WmAys\nSep6kNxX6GxZJ5vwb7rppr32OfHEE9l///2BYOriqVOnUldXx3vf+16OP/74Ts/bq1evPY8sHDdu\nHHfddVe717dt28bGjRv52Mc+BkDv3r0B2LlzJ1/60pe4//77qaurY+PGjbz88su8973vLep9Sjqp\nd0t6JN1LZyawJNND51ngwoSvl4jTTz+dOXPmsHLlSt58803GjRvHunXr2u1TyJTEPXv23NMq79Gj\nB7t27Yp03JIlS9i8eTMrVqygZ8+eDBkyhB07duR9fSkNJbXodK+SlWjCd/dVQKRJfeKQ1NfCvn37\ncvzxx3PRRRdxzjnnhO5/7LHHcuutt3LBBRewefNmmpub+eQnP5n3dffdd18GDhzIL37xC8444wze\nfvttdu/eTUtLC+95z3vo2bMn9957L+vXry/kbUkVKfa/6e6Or6TeLWr5J0sjbSM655xzWL16daSE\nf+aZZzJw4ECGDRvGueeey9ixY9lvv/0Kuu5PfvITrrnmGkaOHMkxxxzDSy+9xLRp01i+fDkjRozg\nxz/+MYcffnhB5xaRdKmp6ZEryfbt2+nbty9btmzhqKOO4qGHHqqIGnu13s+06lj7bhzcCERvARd7\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b217c90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#iris数据集散点图\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None) # 加载Iris数据集作为DataFrame对象\n",
    "X = df.iloc[:, [0, 2]].values # 取出2个特征，并把它们用Numpy数组表示\n",
    "\n",
    "plt.scatter(X[:50, 0], X[:50, 1],color='red', marker='o', label='setosa') # 前50个样本的散点图\n",
    "plt.scatter(X[50:100, 0], X[50:100, 1],color='blue', marker='x', label='versicolor') # 中间50个样本的散点图\n",
    "plt.scatter(X[100:, 0], X[100:, 1],color='green', marker='+', label='Virginica') # 后50个样本的散点图\n",
    "plt.xlabel('petal length')\n",
    "plt.ylabel('sepal length')\n",
    "plt.legend(loc=2) # 把说明放在左上角，具体请参考官方文档\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#!/usr/bin/env python\n",
    "# coding=utf-8\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from matplotlib.colors import ListedColormap\n",
    "\n",
    "\n",
    "def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):\n",
    "    # setup marker generator and color map\n",
    "    markers = ('s', 'x', 'o', '^', 'v')\n",
    "    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')\n",
    "    cmap = ListedColormap(colors[:len(np.unique(y))])\n",
    "    # plot the decision surface\n",
    "    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
    "    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
    "    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))\n",
    "    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n",
    "    Z = Z.reshape(xx1.shape)\n",
    "    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)\n",
    "    plt.xlim(xx1.min(), xx1.max())\n",
    "    plt.ylim(xx2.min(), xx2.max())\n",
    "    # plot class samples\n",
    "    for idx, cl in enumerate(np.unique(y)):\n",
    "        plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.8, c=cmap(idx),marker=markers[idx], label=cl)\n",
    "    # highlight test samples\n",
    "    if test_idx:\n",
    "        X_test, y_test = X[test_idx, :], y[test_idx]\n",
    "        plt.scatter(X_test[:, 0], X_test[:, 1], c='', alpha=1.0, linewidth=1, marker='o', s=55, label='test set')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10bafdf90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#logistics回归\n",
    "#依赖以上自定义function： plot_decision_regions\n",
    "from sklearn import datasets\n",
    "import numpy as np\n",
    "from sklearn.cross_validation import train_test_split\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "X = iris.data[:, [2, 3]]\n",
    "y = iris.target\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)\n",
    "\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "sc = StandardScaler()\n",
    "sc.fit(X_train)\n",
    "X_train_std = sc.transform(X_train)\n",
    "X_test_std = sc.transform(X_test)\n",
    "\n",
    "X_combined_std = np.vstack((X_train_std, X_test_std))\n",
    "y_combined = np.hstack((y_train, y_test))\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression(C=1000.0, random_state=0)\n",
    "lr.fit(X_train_std, y_train)\n",
    "lr.predict_proba(X_test_std[0,:]) # 查看第一个测试样本属于各个类别的概率\n",
    "plot_decision_regions(X_combined_std, y_combined, classifier=lr, test_idx=range(105,150))\n",
    "plt.xlabel('petal length [standardized]')\n",
    "plt.ylabel('petal width [standardized]')\n",
    "plt.legend(loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4lOXZ9/HvmZ0sJCFkDyGQsENCYmQRV0RFBVSo1WrV\n7pulau1jbd/HVlvr08W21mqtdrFqqSu4EBRFRVAEZA87CYHsK5CQELLO9f6R9H3VB0uAmblm7jk/\nx5GDZDLJ/EbJjzv3XPd1ijEGpZRS/i/IdgCllFLuoYWulFIOoYWulFIOoYWulFIOoYWulFIOoYWu\nlFIOoYWulFIOoYWulFIOoYWulFIOEeLNBxs6dKjJysry5kMqpZTf27RpU5MxJvFk9/NqoWdlZbFx\n40ZvPqRSSvk9ESkfyP30lItSSjmEFrpSSjmEFrpSSjmEFrpSSjmEFrpSSjmEFrpSSjmEFrpSSjmE\nFrpyjI7uXp5cc4AtFUfQ0YoqEHn1wiKlPOnRlaX88d1SADLiB3Flbipzc9OYkDYYEbGcTinP00JX\njlBxqJ3HV5dxxaQUZo5NZum2Gv72/gEeX1VGVkIkc3LTmJOXypjkGC135Vha6MoRfr5sFyFBwk/m\nTCAlNoLPnZXBkWNdLN9ZR1FxDX96r5RHVpaSkxTNnNxU5uSmkZMUbTu2Um4l3jzXWFhYaHQvF+Vu\nq/Y1csvfP+Ku2WP4zoU5J7xPY2sny3fUsrS4lg0HD2MMjEsdzJz+0zKZCZFeTq3UwInIJmNM4Unv\np4Wu/FlXj4vZf1iNy2V4847zCQ8JPunX1LV08Pr2WoqKa9hc0QxAbkYsc3JTuTI3jfS4QZ6OrdQp\n0UJXAeEvq8v4xeu7+fuXCpk5NvmUv77qSDvLimspKq5le3ULAAWZcczJTePK3FSSB0e4O7JSp0wL\nXTlew9EOZv52FWdnxfPkl6ec8fc72HSMZdtrWbqthj11rYjA2VlDmJubyuWTUhkaHe6G1EqdOi10\n5Xh3vrCN17ZV89YdFzBiaJRbv3dpQxtFxTUUFddS2tBGkMA52UOZk5vK7IkpxEWGufXxlPpPtNCV\no22uOML8P33Ity7I5u7Lx3rscYwx7K1vpWhb3zn3g4faCQkSzh01lDm5aZyTnUBIsPeWQQ6NCico\nSJddBhotdOVYLpfh6j+tof5oB+/eeSFR4d5ZfWuMYWfNUZYW11C0rZbq5uNeedyPu3FqJr+4ZpLX\nH1fZNdBC13Xoyu+8uKmS4qoWHrpustfKHEBEmJgey8T0WO6ePZYtlc3sqjnqtcdfta+R5zdU8q0L\nshk2RJdZqv9NC135lZbj3fx6+V4Kh8dz1eQ0azlEhILMeAoy4732mBePS+KCvY38edV+PUpXJ6Sb\ncym/8tDb+zjc3sW98yYE3CX8qbGDuLYwgxc3VlHb4v3TPcr3aaErv7G3rpWn15Zzw5RMJqbH2o5j\nxbcvzMZlDI+vKrMdRfkgLXTlF4wx3Ld0J9HhIfzg0jG241iTER/JgoIMnv2ogoajHbbjKB+jha78\nwhs76vhw/yF+cOlo4qMCew34dy7KpsdleGK1HqWrT9JCVz7veFcvv1i2m7EpMXxhSqbtONYNT4ji\nqrw0Fq2voKmt03Yc5UO00JXPe2zVfqqbj3PfvAmEBOtfWYBbZ+bQ0dPLX98/YDuK8iH606F8WuXh\ndv68aj9z89KYOjLBdhyfkZ0YzZzcNJ5Ze5Ajx7psx1E+Qgtd+bT7l+0iWIQfX+G5y/v91cKZORzr\n6pujqhRooSsf9n5JI2/urOe7M3NIjdU9yj9tdHIMl09M4ck1B2k53m07jvIBWujKJ3X3urhv6S6G\nJ0Ty1XNH2I7js747M4fWzh6e+vCg7SjKB2ihK5/01IcHKW1o454rxxMRevIpRIFqQloss8Yl87cP\nDtDaoUfpgU4LXfmcxtZO/vB2CReOSeTicUm24/i8712cQ8vxbp5ZV247irJMC135nF8v30NHTy8/\nmTM+4PZrOR25GXFcOCaRv75/gPauHttxlEUnLXQRiRCRj0Rkm4jsFJH7+m//h4gcEJGt/W+TPR9X\nOd2WiiO8uKmKr5w7gpGJ0bbj+I2FM0dx+FgXi9ZV2I6iLBrIEXonMNMYkwdMBmaLyLT+z/2XMWZy\n/9tWj6VUAcHlMtz72k6SYsJZOHOU7Th+5azh8ZybM5THV5fR0d1rO46y5KSFbvq09X8Y2v/mvTFH\nKmC8tKmKbVUt/OiKsUR7cXCFUyycmUNTWyfPfqRH6YFqQOfQRSRYRLYCDcAKY8z6/k/9QkSKReT3\nInLCkegi8g0R2SgiGxsbG90UWzlNy/FufrV8D2cNj+fqyem24/ilqSMTmDJiCH9etV+P0gPUgArd\nGNNrjJkMZABTRGQi8CNgLHA2MAT44Wd87RPGmEJjTGFiYqKbYiun+cPbJRxu7+K+ABxc4U63XTyK\n+qOdvLipynYUZcEprXIxxjQDK4HZxpja/tMxncCTwBRPBFTOV1LfylNrD3L92YE7uMJdzslOoCAz\njj+/t5+uHpftOMrLBrLKJVFE4vrfHwRcAuwRkdT+2wS4GtjhyaDKmYwx3Lt0J1FhwfzXZYE7uMJd\nRITvXTyK6ubjvLxFj9IDzUCO0FOBlSJSDGyg7xx6EbBIRLYD24GhwP2ei6mc6s2ddawpPcSdl45h\nSIAPrnCXC0YnkpsRy6Mr99PTq0fpgeSkSwmMMcVA/glun+mRRCpgHO/q5edFfYMrbpyqgyvcRURY\nOHMUX396I69urWHBWRm2Iykv0StFlTWPr+4bXHGvDq5wu1njkhiXOphHV5bS69JVxoFCf4qUFZWH\n23nsvf3MyU1lmg6ucDsR4XszcyhrOkZRcY3tOMpLtNCVFQ+8vpsgEX58xTjbURzrsgkpjE6O5pF3\nS3HpUXpA0EJXXremtIk3dtRx60XZpMXp4ApPCQoSvjtzFCUNbSzfWWc7jvICLXTlVd29Lu59bSeZ\nQyL52nkjbcdxvCsnpTIyMYqH3ynRo/QAoIWuvOrpteWUNLRxzxwdXOENwUHCdy/KYU9dK2/vrrcd\nR3mYFrrymqa2Th5asY/zRycySwdXeM28vDSGJ0Tyx3dLMUaP0p1MC115za+X7+F4dy8/nauDK7wp\nJDiIWy/MYXt1C+/t1Q3ynEwLXXnF1spmXtjYN7giWwdXeN01Bemkxw3i4XdL9CjdwbTQlce5XIaf\nvraTxJhwFs7MsR0nIIUGB/Gdi7LZUtHMmtJDtuMoD9FCVx63eHMV2yqbuXv2WGIiQm3HCVifOyuD\n1NgIHn6nxHYU5SFa6Mqjjnb0Da4oyIzjmnwdXGFTeEgw3zx/JB8dPMy6Mj1KdyItdOVRD79dwqFj\nXdw3byJBQfpCqG3XT8kkMSZcj9IdSgtdeUxpQyv/+PAg1589jEkZOrjCF0SE9h2lf7j/EBsPHrYd\nR7mZFrryCGMM9762i8iwYH5wqQ6u8CU3TM0kISqMh98ttR1FuZkWuvKIN3fW80FpE9+/ZDQJ0Sec\nH64siQwL4WvnjWT1vka2VjbbjqPcSAtduV1Hdy/3L9vFmOQYvjhtuO046gRumj6cuMhQHnlXz6U7\niRa6crvHV5VRdUQHV/iy6PAQvjpjBG/vbmBHdYvtOMpN9KdNuVXVkXb+9F4pV+amMj1bB1f4sltm\nZBETEcIjei7dMbTQlVs98PpuRNDBFX5gcEQoX54xguU769hTd9R2HOUGWujKbT4sbeL17XXcemEO\n6Tq4wi98ZUYWUWHBepTuEFroyi26e13cu3Qnw4YM4uvn6+AKfxEXGcbN52SxbHstpQ1ttuOoM6SF\nrtzin+vK2Vffxj1X6uAKf/O1c0cQERLMoyv1KN3faaGrM9bU1snvVuzjvFFDuWR8su046hQlRIfz\nxWmZvLq1moNNx2zHUWdAC12dsQff3Mvxrl5+OneCDq7wU18/fyShwUF6lO7ntNDVGSmuaub5jZV8\neUYWOUk6uMJfJcVE8IUpmby8pZrKw+2246jTpIWuTtu/B1ckRIXzvYtH2Y6jztC3LsgmSIQ/vbff\ndhR1mrTQ1WlbsqWaLRXN3H25Dq5wgpTYCD5/dgYvbaqkpvm47TjqNGihq9PS2tHNL9/YQ35mHPN1\ncIVjfOuCbIyBx1fpUbo/0kJXp+Xhd0o4dKyT++ZN0MEVDpIRH8nnzsrg2Q2VNBztsB1HnSItdHXK\nShvaeHLNQa4rHEZuRpztOMrNvnNhDr0uw+Ory2xHUadIC12dEmMM9y3dyaCwYH5wmQ6ucKLMhEiu\nnpzOovXlNLV12o6jToEWujolK3bV835J3+CKoTq4wrG+fWE2Hd0ulmyush1FnQItdDVgHd29/HzZ\nLkYnR+vgCofLSYomPzOOxZuqMcbYjqMGSAtdDdhfVpdRefg4986dQKgOrnC8+QUZ7K1vZVetbq3r\nL/SnUg1IdfNxHn2vlCsmpXBOzlDbcZQXzM1NJTRYWLyp2nYUNUBa6GpAHnh9N6CDKwJJXGQYF49N\n5rVt1XT3umzHUQOgha5O6sP9TSwrruXbF+SQER9pO47yovkF6TS1dfF+SaPtKGoATlroIhIhIh+J\nyDYR2Ski9/XfPkJE1otIqYg8LyJhno+rvK2n18V9r+0iI34Q37xAB1cEmgvHJBEfGcrizXraxR8M\n5Ai9E5hpjMkDJgOzRWQa8Cvg98aYHOAI8FXPxVS2/HNdOXvrW/lvHVwRkMJCgrhqcjordtXTcrzb\ndhx1EictdNPn37OpQvvfDDATeKn/9qeAqz2SUFlz6GODKy6boIMrAtX8gnS6ely8vr3WdhR1EgM6\nhy4iwSKyFWgAVgD7gWZjTE//XaoA3aHJYR58ay/tXb38dO54HVwRwCalx5KTFK0XGfmBARW6MabX\nGDMZyACmAGMH+gAi8g0R2SgiGxsb9YUVf7G9qoXnNlTypXOyyEmKsR1HWSQizC9IZ8PBI5Qf0hF1\nvuyUVrkYY5qBlcB0IE5EQvo/lQGc8FUTY8wTxphCY0xhYmLiGYVV3tE3uGJH3+CKWTq4QsHVk9MR\ngZe36Iujvmwgq1wSRSSu//1BwCXAbvqK/XP9d7sFeNVTIZV3vbK1ms0Vzfxw9hgG6+AKBaTFDeKc\n7ASWbNatAHzZQI7QU4GVIlIMbABWGGOKgB8C3xeRUiAB+JvnYipvae3o5n/e2MPkYXEsKMiwHUf5\nkPn5GVQcbmdT+RHbUdRnCDnZHYwxxUD+CW4vo+98unKQR94tpbG1k7/eXKiDK9QnzJ6Ywn+/soPF\nm6spzBpiO446Ab1SVP0/+xvb+PuaA3y+MIO8YTq4Qn1SVHgIl09Moai4ho7uXttx1AlooSvg34Mr\ndhEREsxdswe8iEkFmPkFGbR29PDO7gbbUdQJaKErAN7e3cDqfY3croMr1H8wPTuBlMERuibdR2mh\nq77BFUW7GJUUzc3TdXCF+mzBQcLV+em8t69Rx9P5IC10xV/fL6PicDv3ztPBFerk5hek0+syvLq1\nxnYU9Sn60xvgapqP8+jK/Vw+MYUZOrhCDcDo5BgmpcfqaRcfpIUe4B54fTcuY3RwhTol8wvS2Vlz\nlD11Op7Ol2ihB7B1ZYcoKq7l2xdmM2yIDq5QAzcvL42QIOFl3Sfdp2ihB6ieXhf3vraT9LhBfOuC\nbNtxlJ9JiA7nwjFJvLylml6XbgXgK7TQA9S/PqpgT10r98wZp4Mr1GlZUJBOQ2sna0qbbEdR/bTQ\nA9DhY1389q19zMhJ4LIJKbbjKD81c1wSgyNC9MVRH6KFHoAefGsvbZ093Dt3gg6uUKctPCSYuXlp\nLN9ZR1tnz8m/QHmcFnqA2VHdwrMfVXDL9CxGJevgCnVm5hdk0NHt4g0dT+cTtNADzENv7yM+Mozb\ndHCFcoOCzDiyEiJZoqtdfIIWegCpPNzOO3sauGFKJrGDdHCFOnN94+kyWFt2iKoj7bbjBDwt9ADy\nz/XlBIlww9RM21GUg1yT3zcfXrcCsE8LPUB0dPfywoZKLhmXTFrcINtxlIMMGxLJlBFDWLy5SsfT\nWaaFHiCWbqvhSHs3N5+juykq91tQkE5Z4zG2VbXYjhLQtNADgDGGp9eWMyopmukjE2zHUQ50+aRU\nwkOCdE26ZVroAWBrZTPbq1u4efpwXXeuPGJwRCiXTkjhtW01dPboeDpbtNADwDNry4kOD+Gaggzb\nUZSDzS9Ip7m9m5V7Gm1HCVha6A7X1NZJUXEtCwrSiQ4PsR1HOdh5OUNJjAnX0y4WaaE73PMbKunq\ndXGTjpZTHhYSHMTVk9NYubeBw8e6bMcJSFroDtbT62LRunJm5CSQk6SX+SvPm1+QQXevoahY16Tb\noIXuYO/saaCmpYObpmXZjqICxLjUwYxLHcxi3QrACi10B3t67UHSYiOYNS7JdhQVQBYUpLOtspnS\nhjbbUQKOFrpDlTa0sqb0EDdOG05IsP5vVt4zb3IaQQIvb9EXR71Nf9Id6pm15YQFB3Hd2cNsR1EB\nJikmgvNHJ/Ly5mpcOp7Oq7TQHaits4fFm6u5MjeVodHhtuOoADS/IIOalg7WHThkO0pA0UJ3oJc3\nV9HW2cPNulRRWXLp+GRiwkN0n3Qv00J3mH/v2zIpPZbJw+Jsx1EBKiI0mCsmpfLG9lrau3Q8nbdo\noTvM2rJDlDS06b4tyrr5Bekc6+rlrZ31tqMEDC10h3lmbTlxkaHMzUuzHUUFuLOzhpARP4jFuhWA\n12ihO0hty3He2lXPdWcPIyI02HYcFeCCgoT5+emsKW2irqXDdpyAoIXuIP9aX4HLGL44VV8MVb7h\nmoIMXAZe2aovjnqDFrpDdPb08uxHFVw8NolhQyJtx1EKgBFDoyjIjGPxJh1P5w1a6A6xfEcdTW1d\n3DQ9y3YUpT5hfkEGJQ1t7Kw5ajuK42mhO8RTHx4kKyGS83KG2o6i1CfMzU0jLDhIXxz1gpMWuogM\nE5GVIrJLRHaKyG39t98rItUisrX/7QrPx1UnsqO6hc0Vzdw0PYugIF2qqHxLbGQos8Yn8drWGrp7\nXbbjONpAjtB7gDuNMeOBacCtIjK+/3O/N8ZM7n973WMp1X/09NqDDAoN5nNn6Yg55Zvm52dw6FgX\nq/fpeDpPOmmhG2NqjTGb+99vBXYD6Z4Opgamub2LV7fWcHV+OrGDQm3HUeqELhiTyJCoMN0KwMNO\n6Ry6iGQB+cD6/pu+KyLFIvJ3EYl3czY1AC9srKSzx6X7tiifFhocxLy8NFbsrqelvdt2HMcacKGL\nSDSwGLjdGHMUeAzIBiYDtcBvP+PrviEiG0VkY2Oj/rrlTi6X4Z/rKpiSNYRxqYNtx1HqP1pQkEFX\nj4tl22ttR3GsARW6iITSV+aLjDFLAIwx9caYXmOMC/gLMOVEX2uMecIYU2iMKUxMTHRXbgWs2tdI\nxeF2HQCt/MLE9MGMSopmia528ZiBrHIR4G/AbmPM7z52e+rH7nYNsMP98dR/8tTagyTFhHPZhBTb\nUZQ6KRFhfkEGG8uPUH7omO04jjSQI/QZwE3AzE8tUfy1iGwXkWLgIuAOTwZVn3Sw6Rir9jXyhSmZ\nhIXo5QTKP1ydn4YI+uKoh4Sc7A7GmA+AEy1u1mWKFv1zXTnBItwwNdN2FKUGLDV2EDOyh7JkSxW3\nzxqlWzy7mR7a+aHjXb28sLGSyyamkDw4wnYcpU7J/IJ0Kg8fZ2P5EdtRHEcL3Q+9urWaox093KL7\ntig/dNmEFCLDgvXFUQ/QQvcz/x4xNzYlhrOzdOm/8j9R4SHMnphCUXEtHd29tuM4iha6n9lUfoRd\ntUe5eXqWnn9UfmtBQQatHT2s2KXj6dxJC93PPL22nJiIEK7O1xFzyn9NG5lAamyEnnZxMy10P9LQ\n2sEbO2q59qxhRIaddIGSUj4rOEi4Jj+d1SVNNLTqeDp30UL3I899VEl3r9ErQ5UjzC9Ip9dleG1r\nje0ojqGF7ie6e10sWl/O+aMTGTE0ynYcpc5YTlIMeRmxepGRG2mh+4kVu+qpP9rJzdP06Fw5x/yC\nDHbVHmV3rY6ncwctdD/x1IcHyYgfxEVjk2xHUcpt5ualERIkvLxFj9LdQQvdD+yta2X9gcN8cdpw\ngnXEnHKQIVFhXDQ2iZe3VNOj4+nOmBa6H3h67UHCQ4K4rnCY7ShKud2CgnQaWztZs/+Q7Sh+Twvd\nxx3t6OblLdXMzUsjPirMdhyl3O6isUnEDgrVNeluoIXu4xZvqqK9q1f3bVGOFR4SzFWT03h9ey3b\nq1psx/FrWug+zOUyPLO2nMnD4piUEWs7jlIec8es0QyNDmfhs5tp6+yxHcdvaaH7sDX7myhrOsYt\n5+hSReVs8VFh/OH6fCoOt/PfL2/HGGM7kl/SQvdhT68tJyEqjCsmpZ78zkr5uSkjhnD7rNG8srWG\nxXqx0WnRQvdRVUfaeWd3PddPGUZ4SLDtOEp5xa0X5TBt5BDueWUH+xvbbMfxO1roPmrR+goAbpiq\np1tU4AgOEv5wfT6DwoK5ddFm3S/9FGmh+6CO7l6e+6iCS8Ynkx43yHYcpbwqeXAED16by566Vh54\nfbftOH5FC90HLSuu5Uh7NzfrUkUVoGaOTeZr547g6bXlLN9RZzuO39BC90FPrz1IdmIU52Qn2I6i\nlDV3zR7LpPRY7nppG1VH2m3H8Qta6D5ma2Uz26padMScCnhhIUE8ckM+LgO3PbdV93oZAC10H/P0\n2oNEhQUzvyDddhSlrBueEMUD8yexqfwID71dYjuOz9NC9yGH2jopKq5lfkEGMRGhtuMo5RPm5aVx\nXeEwHn2vlDWlTbbj+DQtdB/y/MZKunpc3Kwj5pT6hJ/OG092YjS3P7+VprZO23F8lha6j+h1GRat\nq2D6yARGJcfYjqOUT4kMC+GRG/JpOd7N91/YhsulWwOciBa6j3hndz3Vzcd13xalPsPYlMH8ZM54\nVu9r5C/vl9mO45O00H3EM+vKSY2NYNa4ZNtRlPJZN07N5PKJKfzmzb1sqThiO47P0UL3Afsb23i/\npIkbp2YSEqz/S5T6LCLCL+fnkjw4goXPbqHleLftSD5F28MHPLO2nNBg4bqzM21HUcrnxUaG8vAX\n8qlt6eDHS3Sr3Y/TQrfsyLEuFm+q4spJqSTGhNuOo5RfOGt4PD+4dAzLttfy3IZK23F8hha6RSv3\nNjD7D6s53t3LV88daTuOUn7lm+eP5LxRQ7n3tZ3sq2+1HccnaKFb0NbZw4+WFPPlJzcQOyiUV26d\noSPmlDpFQUHC7z4/mZiIUL77r80c79KtdrXQvWxd2SFmP7Sa5zZU8s0LRrJ04blMTNcyV+p0JMaE\n8/vr8thX38bPinbajmNdiO0AgaKju5dfL9/L39ccICshkpe+NZ2zhg+xHUspv3feqES+fWE2j723\nn3OyhzI3L812JGu00L1gS8UR7nxxG2WNx7hl+nB+ePlYIsP0P71S7vL9S0azruwQP16ynbyMODIT\nIm1HskJPuXhQV4+L37y5hwWPfUhHVy+LvjaV+66aqGWulJuFBgfx8PX5ILDwuS109QTmVrsnLXQR\nGSYiK0Vkl4jsFJHb+m8fIiIrRKSk/894z8f1H7tqjjLvkQ94dOV+FhRksPyO85mRM9R2LKUca9iQ\nSH61IJdtlc389q29tuNYMZAj9B7gTmPMeGAacKuIjAfuBt4xxowC3un/OOD19Lp45N0Srnr0A5ra\nuvjrzYX85to8But2uEp53BWTUrlxaiaPry7jvb0NtuN43UkL3RhTa4zZ3P9+K7AbSAeuAp7qv9tT\nwNWeCukvShvaWPDntTz41j4um5DCijvOZ9Z43ZtFKW+6Z854xqbEcOcL22g42mE7jled0jl0EckC\n8oH1QLIxprb/U3VAwDaXy2X42wcHuPLh9yk/dIw/fiGfR24oID4qzHY0pQJORGgwj9yQT3tXL7c/\nv5XeANpqd8CFLiLRwGLgdmPM0Y9/zvRtpnDC/2oi8g0R2SgiGxsbG88orC+qPNzOF/6yjp8X7eLc\nnKG8dcf5Ab1sSilfkJMUw33zJvDh/kM89l6p7TheM6DlFiISSl+ZLzLGLOm/uV5EUo0xtSKSCpzw\nhJUx5gngCYDCwkLH/FNpjOG5DZXcX7QLEeHXn8vl2rMydLCzUj7i2sIMPiht4vdvlzB1ZAJnZzn/\nuo+BrHIR4G/AbmPM7z72qdeAW/rfvwV41f3xfFNdSwdfenIDP1qynbxhcSy//Tw+XzhMy1wpHyIi\n/OKaiaTHDeK2Z7fQ3N5lO5LHDeSUywzgJmCmiGztf7sC+CVwiYiUALP6P3Y0YwyvbKnm0t+vYv2B\nQ/zsqgn886tTyYgPzIsYlPJ1MRGhPHJDPo1tndz1UrHjt9o96SkXY8wHwGcdel7s3ji+61BbJ//n\n5R0s31lHQWYcv/38ZEYMjbIdSyl1ErkZcfxw9ljuX7abZ9aVc/P0LNuRPEYvWRyAN3fW8eMl22nt\n6OHuy8fy9fNGEhykp1eU8hdfmTGCNaVN3F+0m7OGxzMhzZkb4uml//9BS3s3339+K998ZhMpsREs\nXXgu37ogW8tcKT8TFCQ8eG0e8VGhLHx2C8c6e2xH8ggt9M+wal8jlz20mle31XDbxaN45dYZjEmJ\nsR1LKXWaEqLDeei6fA40HeMnrzpzq1095fIpxzp7+MXru/nX+gpykqJ54uazyM2Isx1LKeUG07MT\nWDhzFA+/U0JCdBjXnz2MkYnRtmO5jRb6x6wvO8QPXtpG1ZHjfP28Edx56RgiQoNtx1JKudH3Zuaw\nv6GNJ1aX8cTqMsanDmZOXipzc9MYNsS/V6yJN5fxFBYWmo0bN3rt8Qaqo7uX37zZN3xiWHwkv/18\nXkBchKBUIKttOc6y4lqKimvZWtkMQN6wOObmpnLFpFTS4gZZTvj/icgmY0zhSe8X6IW+rbKZ77+w\nlf2Nx7hp2nDuvnwsUeH6i4tSgaTycDvLttdSVFzDjuq+nU0Kh8czp7/ckwZHWM2nhX4SXT0u/vhu\nCX96bz9JMeH8akEu549OtB1LKWXZgaZjLCuuoai4lj11rYjA1BFDmJObxuUTU0iIDvd6Ji30/2BP\n3VG+//x36NYeAAAGTUlEQVQ2dtUeZUFBBj+ZO57YQbpfuVLqk0rqWykqrmVpcQ1ljccIDhLOyU5g\nTm4ql01IIS7SOzuqaqGfQE+viyfeL+P3K/YROyiUB66ZxKUTUqzlUUr5B2MMu2tbKeo/cq843E5o\nsHDeqETm5KZyyfhkYjw4xEYL/VPKGtu488VtbKlo5opJKdx/9SSG6H7lSqlTZIxhe3ULRcW1LCuu\npbr5OGEhQVw4OpE5eWnMGpfk9rnBWuj9XC7DU2sP8qvlewgPCeZnV01gXl6a7oyolDpjLpdhS2Uz\nRcU1vL69lvqjnUSEBnHx2GTm5KZy0dgktyx91kIHqo60818vFrO27BAXjUnklwtySbb8arVSyplc\nLsOGg4cpKq7ljR21NLV1ERUWzKzxyczNTeO80UMJDzm9cg/oQjfG8MLGSn5etBtjDD+ZO173K1dK\neU1Pr4v1Bw5TVFzDGzvqaG7v5rEbC7h8Uuppfb+ALfT6ox3cvbiYlXsbmTZyCL/5XJ7fX/2llPJf\n3b0uPihtYvrIhNM+/TLQQnfMFTTGGJYW13LPKzvo6O7lp3PHc8v0LIJ0Z0SllEWhwUFcNCbJK4/l\niEI/fKyLe17ZwbLtteRnxvHgtXlkO2jDHaWUGgi/L/QVu+r50ZJiWo53c9fsMXzjvJGEBOuuwEqp\nwOO3hX60o5ufLd3FS5uqGJc6mGe+OpVxqYNtx1JKKWv8stA/KGnirpe2Ud/aycKZOSycOYqwED0q\nV0oFNr8q9PauHv7n9T08s66c7MQoFn/7HCYP0+ETSikFflToGw8e5s4Xt1FxuJ2vnTuCH1ymwyeU\nUurj/KLQ//hOCb97ex8Z8YN49uvTmDYywXYkpZTyOX5R6MOHRvGFKZn8+IpxROvwCaWUOiG/aMd5\neWnMy0uzHUMppXyaLg1RSimH0EJXSimH0EJXSimH0EJXSimH0EJXSimH0EJXSimH0EJXSimH0EJX\nSimH8OoIOhFpBMq99oBnZijQZDuEhzj5uYGzn58+N/91Js9vuDEm8WR38mqh+xMR2TiQGX7+yMnP\nDZz9/PS5+S9vPD895aKUUg6hha6UUg6hhf7ZnrAdwIOc/NzA2c9Pn5v/8vjz03PoSinlEHqErpRS\nDqGF/jEiMkxEVorILhHZKSK32c7kbiISLCJbRKTIdhZ3E5E4EXlJRPaIyG4RmW47k7uIyB39fyd3\niMizIhJhO9OZEJG/i0iDiOz42G1DRGSFiJT0/xlvM+Pp+ozn9pv+v5fFIvKyiHhkGLIW+if1AHca\nY8YD04BbRWS85Uzudhuw23YID/kDsNwYMxbIwyHPU0TSge8BhcaYiUAwcL3dVGfsH8DsT912N/CO\nMWYU8E7/x/7oH/zv57YCmGiMyQX2AT/yxANroX+MMabWGLO5//1W+goh3W4q9xGRDOBK4K+2s7ib\niMQC5wN/AzDGdBljmu2mcqsQYJCIhACRQI3lPGfEGLMaOPypm68Cnup//yngaq+GcpMTPTdjzFvG\nmJ7+D9cBGZ54bC30zyAiWUA+sN5uErd6CLgLcNkO4gEjgEbgyf5TSn8VkSjbodzBGFMNPAhUALVA\nizHmLbupPCLZGFPb/34dkGwzjAd9BXjDE99YC/0ERCQaWAzcbow5ajuPO4jIHKDBGLPJdhYPCQEK\ngMeMMfnAMfz3V/ZP6D+XfBV9/2ilAVEi8kW7qTzL9C2/c9wSPBH5P/Sd2l3kie+vhf4pIhJKX5kv\nMsYssZ3HjWYA80TkIPAcMFNE/mk3kltVAVXGmH//RvUSfQXvBLOAA8aYRmNMN7AEOMdyJk+oF5FU\ngP4/GyzncSsR+RIwB7jReGi9uBb6x4iI0HcOdrcx5ne287iTMeZHxpgMY0wWfS+ovWuMccxRnjGm\nDqgUkTH9N10M7LIYyZ0qgGkiEtn/d/RiHPKC76e8BtzS//4twKsWs7iViMym73TnPGNMu6ceRwv9\nk2YAN9F39Lq1/+0K26HUgC0EFolIMTAZeMByHrfo/63jJWAzsJ2+n1u/vqpSRJ4F1gJjRKRKRL4K\n/BK4RERK6Put5Jc2M56uz3hujwAxwIr+XvmzRx5brxRVSiln0CN0pZRyCC10pZRyCC10pZRyCC10\npZRyCC10pZRyCC10pZRyCC10pZRyCC10pZRyiP8LXffhpDVrzIYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107664190>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "s\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import optimize\n",
    "\n",
    "x=np.arange(1,13,1)\n",
    "y=np.array([17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18 ])\n",
    "plt.plot(x,y)\n",
    "plt.show()\n",
    "print 's'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "150\n"
     ]
    }
   ],
   "source": [
    "#[2017-7-25]sklearn文本分类\n",
    "from sklearn import datasets as d\n",
    "from sklearn.datasets import fetch_20newsgroups\n",
    "\n",
    "data_all = d.load_iris()\n",
    "data_x = data_all['data']\n",
    "data_y = data_all['target_names']\n",
    "#print data_y\n",
    "#print data_x\n",
    "print len(data_x)\n",
    "#dir(d)\n",
    "\n",
    "#print d.fetch_mldata(subset='train')\n",
    "#newsgroup_train = fetch_20newsgroups(subset='train')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['DESCR', 'data', 'description', 'filenames', 'target', 'target_names']"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#[2017-7-25]应用sklearn做文本分类:http://blog.csdn.net/abcjennifer/article/details/23615947\n",
    "from sklearn.datasets import fetch_20newsgroups \n",
    "#下载指定的数据集\n",
    "#newsgroup_train = fetch_20newsgroups(subset='train') \n",
    "categories = ['comp.graphics',  \n",
    " 'comp.os.ms-windows.misc',  \n",
    " 'comp.sys.ibm.pc.hardware',  \n",
    " 'comp.sys.mac.hardware',  \n",
    " 'comp.windows.x'];  \n",
    "newsgroup_train = fetch_20newsgroups(subset = 'train',categories = categories); #训练数据\n",
    "newsgroup_test = fetch_20newsgroups(subset = 'test',categories = categories);#测试数据\n",
    "dir(newsgroup_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['comp.graphics',\n",
      " 'comp.os.ms-windows.misc',\n",
      " 'comp.sys.ibm.pc.hardware',\n",
      " 'comp.sys.mac.hardware',\n",
      " 'comp.windows.x']\n"
     ]
    }
   ],
   "source": [
    "from pprint import pprint  \n",
    "pprint(list(newsgroup_train.target_names)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Size of fea_train:(2936, 10000)\n",
      "Size of fea_train:(1955, 10000)\n",
      "The average feature sparsity is 1.002%\n"
     ]
    }
   ],
   "source": [
    "#从文本中提取特征\n",
    "from sklearn.feature_extraction.text import HashingVectorizer  \n",
    "#只取了10000个词，即10000维feature，稀疏度还不算低,实际上用TfidfVectorizer统计可得到上万维的feature\n",
    "vectorizer = HashingVectorizer(stop_words = 'english',non_negative = True,  n_features = 10000)  \n",
    "fea_train = vectorizer.fit_transform(newsgroup_train.data)  \n",
    "fea_test = vectorizer.fit_transform(newsgroup_test.data);  \n",
    "#return feature vector 'fea_train' [n_samples,n_features]  \n",
    "print 'Size of fea_train:' + repr(fea_train.shape)  \n",
    "print 'Size of fea_train:' + repr(fea_test.shape)  \n",
    "#11314 documents, 130107 vectors for all categories  \n",
    "print 'The average feature sparsity is {0:.3f}%'.format(fea_train.nnz/float(fea_train.shape[0]*fea_train.shape[1])*100);  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
